无法在Ajax调用中将图像上载到AmazonS3
Cannot upload an image to Amazon S3 in Ajax call
我试图在Ajax调用中将图像上传到AmazonS3,但出现了以下错误:
XmlHttpRequest无法加载https://bucketname.s3.amazonaws.com/.没有'访问控制-
请求的资源上存在Allow_Origin标头。因此,不允许访问源"null"。
我的JavaScript是这样的:
var xmlhttp = XmlHttpRequesr();
var file = document.getElementById('file').files[0];
var fd = new FormData();
var key = "events/" + (new Date).getTime() + '-' + file.name;
POLICY_JSON = {"expiration": "20020-01-01T00:00:00Z","conditions": [ {"bucket": "s3-bucket"},
["starts-with", "$key", ""], {"acl": "private"},{"success_action_redirect": "LOCALHOST"},
["starts-with", "$Content-Type", ""], ["content-length-range", 0, 1048576] ] };
var secret = this.get('key');
var policyBase64 = window.btoa(JSON.stringify(POLICY_JSON));
console.log ( policyBase64 );
var signature = b64_hmac_sha1(secret, policyBase64);
b64_hmac_sha1(secret, policyBase64);
fd.append('key', 'uploads/${filename}');
fd.append('acl', 'private');
fd.append('Content-Type', file.type);
fd.append('AWSAccessKeyId', key);
fd.append('policy', policyBase64);
fd.append('signature',signature);
fd.append("file",file); xmlhttp.open('POST', Url, true); xmlhttp.send(fd); }
有人能帮我解决这个问题吗?
希望你已经有所收获。如果没有,我可以提供一点帮助。我刚开始使用AmazonS3,但我很清楚你需要设置访问控制设置。
https://console.aws.amazon.com/s3/home?region=us-东-1
然后点击你的水桶。然后单击"属性"。
您必须设置bucket策略和CORS策略。
我首先将bucket策略设置为admin,这允许我上传。然后计算出你想做什么所需要做的最低限度,这样你就不会敞开大门。
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>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
相关文章:
- Jcrop未在加载的图像上初始化
- 阻止浏览器缓存上载的图像
- 跨来源图像加载被拒绝-仅限iPhone-简单图像上传
- 将带有自定义数据的图像上载到服务器
- 取消文件上载时删除图像预览
- 上载图像并重定向到新页面而不刷新
- 使用DataURL字符串将图像上载到picasa
- 上载图像的新版本并避免缓存
- Kinetic.js可以't将图像加载到画布上
- 使用悬停(javascript)将图像加载到另一个图像上
- 如何使用画布更改图像的不透明度,然后将其加载到画布中的另一个图像上?-HTML
- 在延迟加载的图像上使用jQuery缩放
- 上载图像、显示,然后写入 SQL Server
- 使用FormData上载base64编码的图像
- 获取上载的文件/图像的名称
- 将图像上载到本地存储
- 使用大小、高度和宽度验证图像上载
- 无法将图像上载到Firebase存储
- 将base64图像上载到.NET Web服务并在那里进行转换
- 无法在Ajax调用中将图像上载到AmazonS3