我得到" 代码3 "尝试使用FileTransfer和 Android 4.3 版本平台从Cordova / Phonegap 3.2应用上传图像文件时出现(连接错误)错误。
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'"标题,但它仍然无法正常工作。其他人认为这可能是导致它的谷歌分析插件的一个问题,所以我删除它,我仍然得到相同的错误。我也尝试了答案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 - 没有发生在之前。
答案 0 :(得分:1)
你试过ft.upload(imageURI,"https://" + data.Bucket + ".s3.amazonaws.com/", success, fail, options);
吗?看起来您是URL编码://部分网址。
答案 1 :(得分:1)
请试试这个
ft.upload(imageURI, encodeURI("https://" + data.Bucket + ".s3.amazonaws.com/"), success, fail, options, true);
我在最后添加了true。因为它接受所有证书。默认情况下,它将拒绝自签名证书。现在您正在使用https。我希望这有效