繁体   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