无法在Amazon S3上PUT图像

时间:2017-02-16 13:48:48

标签: javascript angularjs cordova ionic-framework amazon-s3

我想在 amazon S3 上传图像文件(base64),但我不断收到此错误:

enter image description here

我正在构建 IONIC应用,我的代码是:

    var reader = new FileReader();

            reader.readAsDataURL(value);

            reader.onloadend = function(e) {
                console.log(this.result);

                // AWS
                AWS.config.update({ 
                    accessKeyId: $rootScope.config.access_key, 
                    secretAccessKey: $rootScope.config.secret_key
                });

                AWS.config.region = 'us-west-2';

                var bucket = new AWS.S3({ params: { Bucket:     $rootScope.config.bucket } });

                var params = { 
                    Key: value.name, 
                    ContentType: value.type, 
                    Body: this.result, 
                    ServerSideEncryption: 'AES256',
                    ACL: "public-read"
                };

                bucket.putObject(params, function(err, data) {
                  if(err) {
                    // There Was An Error With Your S3 Config
                    // alert(err.message);
                    console.log(JSON.stringify(err));
                    return false;
                  }
                  else {
                    // Success!
                    console.log('Upload Done');
                  }
                })
                .on('httpUploadProgress',function(progress) {
                  // Log Progress Information
                  console.log(Math.round(progress.loaded / progress.total * 100) + '% done');
                });

包含 dataURI

数据:图像/ JPEG; BASE64,/ 9J / 4AAQSkZJRgABAQAAAQABAA ..... 如何解决这个问题呢 ?

2 个答案:

答案 0 :(得分:1)

在您的Amazon S3帐户中,转到存储桶“属性” - > “权限” - > “编辑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>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
        <AllowedHeader>Content-Type</AllowedHeader>
        <AllowedHeader>Origin</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

您可以将允许的来源限制为仅限主机(例如<AllowedOrigin>中的“http://www.example.com”而不是*),但由于您的存储桶只能通过身份验证进行写入,因此没必要。

答案 1 :(得分:0)

我不得不使用更宽松的配置来使其工作:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule> 
</CORSConfiguration>