Car*_*spa 3 javascript amazon-s3 cordova
我正在关注Heroku关于直接上传到 Amazon S3的教程。通过 Node.js 应用程序从 AWS 获得签名请求后,他们使用“正常”XMLHttpRequest发送文件。
这是他们的功能:
function upload_file(file, signed_request, url){
var xhr = new XMLHttpRequest();
xhr.open("PUT", signed_request);
xhr.setRequestHeader('x-amz-acl', 'public-read');
xhr.onload = function() {
if (xhr.status === 200) {
document.getElementById("preview").src = url;
document.getElementById("avatar_url").value = url;
}
};
xhr.onerror = function() {
alert("Could not upload file.");
};
xhr.send(file);
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在使用 Cordova,由于我没有File从相机插件中获取对象,而只有文件 URI,因此我使用 CordovaFileTransfer将图片上传到我的 Node.js 应用程序,multipart/form-data并且运行良好。
但是,我无法使其适用于 Amazon S3。
这是我所拥有的:
$scope.uploadPhoto = function () {
$scope.getSignedRequest(function (signedRequest) {
if (!signedRequest)
return;
var options = new FileUploadOptions();
options.fileKey = 'file';
options.httpMethod = 'PUT';
options.mimeType = 'image/jpeg';
options.headers = {
'x-amz-acl': 'public-read'
};
options.chunkedMode = false;
var ft = new FileTransfer();
ft.upload($scope.photoURI, encodeURI(signedRequest.signed_request), function () {
// success
}, function () {
// error
}, options);
});
};
Run Code Online (Sandbox Code Playgroud)
我已经尝试了chunkedMode = trueand chunkedMode = false,但是成功和错误回调都没有被调用。
那么,有没有办法将文件上传到 S3 FileTransfer?我真的需要签名的请求还是只有在我使用 XHR 时才需要?
任何提示表示赞赏。
我在科尔多瓦结束了这个功能:
$scope.uploadPhoto = function () {
$scope.getSignedRequest(function (signedRequest) {
if (!signedRequest)
return;
var options = new FileUploadOptions();
options.chunkedMode = false;
options.httpMethod = 'PUT';
options.headers = {
'Content-Type': 'image/jpeg',
'X-Amz-Acl': 'public-read'
};
var ft = new FileTransfer();
ft.upload($scope.photoURI, signedRequest.signedUrl, function () {
$scope.$apply(function () {
// success
});
}, function () {
$scope.$apply(function () {
// failure
});
}, options);
});
};
Run Code Online (Sandbox Code Playgroud)
重要的位是设置Content-Type标头,因此multipart/form-data不会使用它,并chunkedMode = false通过单个请求发送文件。
编辑:删除了对插件代码的更改,事后看来,这些更改是无用的(过时的插件)。
| 归档时间: |
|
| 查看次数: |
2621 次 |
| 最近记录: |