簡體   English   中英

使用Android 4.3上的Phonegap中的FileTransfer將文件上傳到S3時的代碼3

[英]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' ,更新插件等 - 沒有任何效果。 最后我開始將XMLHttpRequestcordova-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM