我想将图片上传到s3。为此,我关注http://railscasts.com/episodes/383-uploading-to-amazon-s3
我可以将单个图像上传到s3,但现在我使用jquery文件上传来上传多个文件。
当我尝试上传文件时,它给了我403(禁止)。
我需要做些什么来解决它?
感谢任何可以提前帮助的人!
答案 0 :(得分:0)
您需要检查S3存储桶的权限。它应该允许“上传/删除”。
此外,您应该设置CORS配置(CORS:跨源资源共享) (对于您的存储桶,请转到属性==>权限,然后单击“添加CORS配置”)
文件应该是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://localhost:3000</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
这里允许我的localhost将文件发布到此存储桶。
答案 1 :(得分:0)
在测试时,您可以使用非常广泛的CORS配置
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
答案 2 :(得分:0)
除了CORS之外,403可以来,因为设置了错误的contentType。
服务器端:
GeneratePresignedUrlRequest rq = new GeneratePresignedUrlRequest(bucketName, objectKey);
rq.setContentType("video/*");
...
客户方:
$.ajax({
url:upUrl,
type: "PUT",
data: file,
contentType:'video/*',
cache: false,
processData:false,
success: function (data) {
}
});