我正在尝试使用预签名 URL 将图像从 ionic 应用程序上传到 S3。
这是目前的情况:
Ionic 应用程序向服务器发送请求以从 AWS S3 获取预先签名的上传 URL。
在服务器端,我有一个节点应用程序使用 aws-sdk 获取预签名 URL,然后将其返回给客户端。
这是我在 Ionic 端的代码,应该将文件上传到 AWS
var options = {
fileKey: 'file',
fileName: fileName,
mimeType: 'image/jpeg',
chunkedMode: false,
timeout: 300000,
httpMethod:'PUT',
encodeURI: false,
headers: {
'Content-Type': 'image/jpeg'
}
};
var ft = new FileTransfer();
ft.upload(cordova.file.dataDirectory + fileName, uploadLink, function () {
console.log("image uploaded");
}, function (err) {
console.log(err);
}, options);
此代码适用于 iOS 设备,但是当我将应用程序部署到 Android 并尝试上传文件时失败并出现以下错误:
FileTransferError body: null code:3 exception: "Write error: ssl=0x8ec63f80: I/O error during system call, Connection reset by peer" http_status: null source: "file:///data/user/0/com.ionicframework.xxxxxxxx/files/xxxxx.jpg" target: "https://xxxxxx.s3.eu-central- ..... "
ionic 信息 Cordova CLI:6.4.0 ionic CLI 版本:2.1.12 ionic 应用程序库版本:2.1.7
设备上的 Android 版本是 6.0
我有点困惑,因为它适用于 iOS,但不适用于 Android。我以前使用过 cordova 文件传输,但从未遇到过类似情况。然而,这是我第一次将文件从 android 直接上传到 S3。
任何帮助将不胜感激。
最佳答案
好的,不确定到底是什么问题,但问题肯定是最新版本的 cordova-plugin-file-transfer 插件(目前是 1.6.0)。此问题仅反射(reflect)在 android 平台上。
我已经安装了旧版本的插件 (1.5.1),它“修复”了这个问题。我为解决问题所做的工作:
1) 安装最新版本的 cordova npm install -g cordova
2) 安装最新版本的 ionic npm install -g ionic
3) 更新android平台ionic平台更新android
4) 移除插件 ionic plugin remove cordova-plugin-file-transfer
5) 安装以前版本的插件 ionic plugin add cordova-plugin-file-transfer@1.5.1
6) 将更改保存到 package.json ionic state save
7) ionic run android
希望对大家有用。
关于android - Ionic android - 使用预签名 URL 将文件上传到 S3(错误代码 : 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40843853/