我想将图像上传到 s3。为此,我正在关注http://railscasts.com/episodes/383-uploading-to-amazon-s3
我可以将单个图像上传到 s3,但现在我正在使用 jquery 文件上传来上传多个文件。
当我尝试上传文件时,它给了我 403(禁止)。
我需要做什么来修复它?
感谢任何可以提前提供帮助的人!
我想将图像上传到 s3。为此,我正在关注http://railscasts.com/episodes/383-uploading-to-amazon-s3
我可以将单个图像上传到 s3,但现在我正在使用 jquery 文件上传来上传多个文件。
当我尝试上传文件时,它给了我 403(禁止)。
我需要做什么来修复它?
感谢任何可以提前提供帮助的人!
在测试时,您可以使用非常广泛的 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>
您需要检查您的 S3 存储桶的权限。它应该允许“上传/删除”。
此外,您应该设置 CORS 配置(CORS:跨域资源共享)(对于您的存储桶,转到 Properties ==> Permissions,然后单击“Add CORS Configuration”)
该文件应该是这样的:
<?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>
在这里,它允许我的本地主机将文件发布到此存储桶。
除了 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) {
}
});