尝试使用FileTransfer和Android 4.3版本平台将我的Cordova / Phonegap 3.2应用程序的图像文件上传到Amazon S3时,出现“代码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'”标头,但它仍然无法正常工作。其他人则认为这可能是导致该问题的Google Analytics(分析)插件存在的问题,因此我将其删除,但仍然遇到相同的错误。我也尝试了答案in this question,但没有成功。

我还想补充一点,我正在服务器上生成签名和策略。

  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(see my post here)中的错误。建议我使用最新的FileTransfer库,并更新文件库,但是I get an error when compiling

我需要帮助来解决此问题。

更新:将FileTransfer,File和Capture插件更新到最新版本并不能解决问题,实际上,现在它也在iOS7上引发了Code 3-以前从未发生过。

最佳答案

您尝试过ft.upload(imageURI,"https://" + data.Bucket + ".s3.amazonaws.com/", success, fail, options);吗?看起来您正在对网址的://部分进行URL编码。

08-07 22:37