[英]Code 3 when uploading file to S3 using FileTransfer in Phonegap on Android 4.3
嘗試使用FileTransfer和Android 4.3版本平台將圖像文件從Cordova / Phonegap 3.2應用程序上傳到Amazon S3時,我收到“ Code 3 ”(連接錯誤)錯誤。
options.fileKey = "file";
options.fileName = filename_for_s3;
options.mimeType = "image/jpeg";
options.chunkedMode = false;
options.headers = {
Connection: "close"
}
ft.upload(imageURI, encodeURI("https://" + data.Bucket + ".s3.amazonaws.com/"), success, fail, options);
該代碼適用於iOS7和較舊的Android版本(在Android 3.2和2.3上測試),但我的問題是版本4.3。 我認為問題不在於代碼本身,因為它適用於其他版本,但可能是Phonegap庫本身。
可能有一個解決方法,但我不熟悉它。 我嘗試了很多關於類似問題的選項,例如將chunkedMode更改為false,而不編碼URI,添加“Connection:'close'”標題,但它仍然不起作用。 其他人認為這可能是導致它的谷歌分析插件的一個問題,所以我刪除它,我仍然得到相同的錯誤。 我也在這個問題上嘗試了答案而沒有成功。
我還想補充一點,我正在服務器上生成簽名和策略。
options.params = {
"key": "uploads/" + filename_for_s3,
"AWSAccessKeyId": data.AWSAccessKey,
'success_action_status': '201',
"acl": "private",
"policy": data.Policy,
"signature": data.Signature
};
還根據需要設置Cors權限:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<ExposeHeader>ETag</ExposeHeader>
<ExposeHeader>x-amz-meta-custom-header</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
更新:我還檢查了Amazon S3日志,但沒有任何與上傳相關的行。
我花了幾天時間試圖找出它沒有任何成功。 我希望你能幫我解決這個問題。 謝謝。
看來這是Cordova 3.2中的一個錯誤 ( 請參閱我的帖子 )。 我被建議使用最新的FileTransfer庫,並且還更新了文件庫,但是在編譯時遇到錯誤 。
我需要幫助來解決這個問題。
更新:將FileTransfer,File和Capture插件更新到最新版本並沒有解決問題,事實上,現在它也在iOS7上拋出Code 3 - 之前沒有發生過。
你試過ft.upload(imageURI,"https://" + data.Bucket + ".s3.amazonaws.com/", success, fail, options);
? 看起來您是URL編碼://部分網址。
請試試這個
ft.upload(imageURI, encodeURI("https://" + data.Bucket + ".s3.amazonaws.com/"), success, fail, options, true);
我在最后加了真。 因為它接受所有證書。 默認情況下,它將拒絕自簽名證書。 現在您正在使用https。 我希望這有效
當我嘗試下載pdf文件時,我也得到了錯誤代碼3。 我也試圖通過Connection: 'close'
,更新插件等 - 沒有任何效果。 最后我開始將XMLHttpRequest
與cordova-plugin-file
結合使用:
window.resolveLocalFileSystemURL(cordova.file.externalCacheDirectory, function(entry) {
entry.getFile('myfile.pdf', { create: true, exclusive: false }, function(fileEntry) {
downloadFile(fileEntry, url);
}, onCreateFileError);
}, onResolveError);
function downloadFile(fileEntry, url) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onload = function (e) {
fileEntry.createWriter(function(fileWriter) {
fileWriter.write(new Blob([xhr.response]));
});
};
xhr.send();
}
此代碼用於下載,但我認為可以應用相同的方法進行上傳。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.