AWS - CORS 无法将文件直接上传到 S3

Posted

技术标签:

【中文标题】AWS - CORS 无法将文件直接上传到 S3【英文标题】:AWS - CORS not working to upload file directly to S3 【发布时间】:2013-02-02 09:03:46 【问题描述】:

我正在尝试使用 jquery 将文件直接上传到 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>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

然后是我的 jquery 代码:

$.ajax(
url: this.action,
type: 'POST',
dataType: 'xml',
data: $('form').serialize(),
crossDomain: true,
cache: false,
success: function(data) 
    window.alert('test');
    
);

如果我直接发布表单,不使用 ajax,它可以正常工作......但是因为我想在上传完成后调用一个方法,所以我使用 jquery 来完成这项工作。 但即使在设置 CORS 设置后,我仍然收到错误:Access-Control-Allow-Origin 不允许 Origin xxxx。

请求头:

Accept:application/xml, text/xml, */*; q=0.01
Cache-Control:no-cache
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Origin:http://localhost:8000
Pragma:no-cache
Referer:http://localhost:8000/upload
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.17 (Khtml, like Gecko) Chrome/24.0.1312.57 Safari/537.17

请求状态为CANCELED,类型为PENDING。

【问题讨论】:

【参考方案1】:

您缺少 POLICY_JSON 和相应的签名,以证明原始表单确实是由存储桶所有者构建的。查看此链接了解详情:

http://aws.amazon.com/articles/1434/

【讨论】:

以上是关于AWS - CORS 无法将文件直接上传到 S3的主要内容,如果未能解决你的问题,请参考以下文章

Rails + CarrierwaveDirect:成功直接上传到S3后无法下载和处理图像

Rails 直接上传到 Amazon S3

使用签名的 url 将文件从 angularjs 直接上传到 amazon s3

使用Iteratees使用Play Scala将文件直接上传到S3 chunk-by-chunk

如何将查询结果从雪花直接上传到 S3?

不使用生产服务器直接上传到 s3