我正在跟进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);
}
现在,我正在与科尔多瓦合作,因为我没有得到File
来自相机插件的对象,但只有文件 URI,我使用了 Cordova 的FileTransfer将图片上传到我的 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);
});
};
我都尝试过chunkedMode = true
and chunkedMode = false
,但是成功回调和错误回调都没有被调用。
那么,有没有办法将文件上传到S3FileTransfer
?
我实际上需要签名的请求还是仅在使用 XHR 时才需要?
任何提示表示赞赏。