我嘗試創建將影像發送到 Amazon S3 存盤桶的 Visualforce Page 和 Apex,雖然它上傳成功,但是當我使用來自 Amazon 的鏈接查看影像時,它顯示框而不是上傳的實際影像。見下圖

這是我的 Visualforce 代碼,它使用 javascript 將檔案發送到 apex:
<input id="logo" name="bsLogo" type="file" />
<button id="submtBtn" onclick="toSubmit()" label="Submit" title="Submit" >Submit</button>
<apex:form id="formId">
<apex:actionFunction name="setParamAF" action="{!apexMethod}" rerender="panelId" status="checkingId" oncomplete="onloadCallback();">
<apex:param name="vBusiLogo" value=""/>
</apex:actionFunction>
</apex:form>
<script>
function toSubmit(){
reader.readAsDataURL(document.getElementById('logo').files[0]);
reader.onload = function(){
var dataURL = reader.result;
setParamAF(dataURL);
};
}
function onl oadCallback(){
alert('uploaded');
}
</script>
dataURL 變數具有以下 base64 值:

在 Apex 類方面,我有以下代碼:
String busiLogo = '';
public static void apexMethod(){
busiLogo = ApexPages.currentPage().getParameters().get('vBusiLogo');
String logoName = 'image.png';
String bucketname ='amazon-file-s3';
String host = 's3-ap-sample-1.amazonaws.com';
Blob beforeblob = Blob.valueOf(busiLogo);
String attachmentBody = EncodingUtil.base64Encode(beforeblob);
HttpRequest req = new HttpRequest();
req.setMethod('PUT');
req.setEndpoint('callout:AmazonS3' '/' logoName);
req.setHeader('Host', bucketname '.' host);
req.setHeader('Content-Length', String.valueOf(attachmentBody.length()));
req.setHeader('Content-Encoding', 'UTF-8');
req.setHeader('Content-Type','image/png');
req.setHeader('Connection', 'keep-alive');
req.setHeader('Date', formattedDateString);
req.setHeader('ACL', 'public-read-write');
Blob blobFile = EncodingUtil.base64Decode(attachmentBody);
req.setBodyAsBlob(blobFile);
Http http = new Http();
HTTPResponse res = http.send(req);
}
你能幫我如何將我的實際影像發送到 s3 檔案,或者我的代碼哪里出了問題?
uj5u.com熱心網友回復:
我發現因為 busiLogo 變數是經過base64編碼的,所以我可以對其進行解碼并"data:image/png;base64"從中洗掉, 。然后對值進行編碼并將編碼后的 blob 值發送到 S3。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/378537.html
