尝试使用angular将文件上传到AWS S3时出现问题。这是错误结果:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>PreconditionFailed</Code>
<Message>At least one of the pre-conditions you specified did not hold</Message>
<Condition>Bucket POST must be of the enclosure-type multipart/form-data</Condition>
<RequestId>A951A5170520EC7C</RequestId>
<HostId>geepsSG0zcsNjTRux85V62EARw3E6HWfXWdckd/Uq0Zja+USfsQM7Myi2T3SqdkBcNsAoGF5RVw=</HostId>
</Error>
我的角度代码:
// Handle file input change event.
fileIn.on('change', function ( e ) {
if ( this.files.length > 0 ) {
// Get the selected file.
var file = this.files[ 0 ];
// Get the S3 Policy and Signature.
$http({
method : 'GET',
url : 'http://localhost:8091',
params : {
file : file.name,
type : file.type
}
}).then(function ( res ) {
// Upload file
$http({
url : 'https://my-bucket.s3.amazonaws.com/',
method : 'POST',
data : {
AWSAccessKeyId : res.data.access,
policy : res.data.policy,
signature : res.data.signature,
file : file,
filename : file.name,
key : file.name,
acl : 'public-read',
"Content-Type" : file.type != '' ? file.type : 'application/octet-stream',
}
}).then(uploadSuccess, uploadFailed, uploadProgress);
}, function ( err ) {
AppLogger.toast('error', 'Critical Error!', err.data, {
type : 'json',
code : err.data.code
});
});
}
});
我尝试使用ng-file-upload
,但错误不同。
为什么会发生错误以及如何解决?谢谢你的帮助!
答案 0 :(得分:1)
您的错误是&#34; POST必须是机箱类型multipart / form-data&#34;。 看起来file.type不是multipart / form-data。
我建议在你的$ http POST之上,你可以在console.log中找到file.type。 或者只是将内容类型更改为multipart / form-data。你不希望它是用于二进制文件的八位字节流。