使用jQuery文件上传到s3 rails app时获取403(禁止)

时间:2012-11-26 03:10:08

标签: jquery file-upload ruby-on-rails-3.1 amazon-s3 railscasts

我想将图片上传到s3。为此,我关注http://railscasts.com/episodes/383-uploading-to-amazon-s3

我可以将单个图像上传到s3,但现在我使用jquery文件上传来上传多个文件。

当我尝试上传文件时,它给了我403(禁止)。

我需要做些什么来解决它?

感谢任何可以提前帮助的人!

3 个答案:

答案 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) {

                }
              });