我正在试图弄清楚如何使用XHR执行浏览器直接上传到Amazon S3。我正在使用一些预先制作的代码来创建签名并执行上传。我所要做的就是输入我的S3安全凭证。 (对于它的价值,我想使用PHP进行策略签名。)
我已将代码分叉到我的GitHub帐户,您可以在此处找到它:https://github.com/keonr/direct-browser-s3-upload-example
正如自述文件所示,我已将S3存储桶CORS设置为允许所有来源,如下所示:
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Content-Type</AllowedHeader>
<AllowedHeader>x-amz-acl</AllowedHeader>
<AllowedHeader>origin</AllowedHeader>
</CORSRule>
</CORSConfiguration>
现在,当我尝试执行文件上传时,脚本返回XHR Error
并且我的浏览器的错误控制台给我一个标准的CORS错误,说我的Origin现在被允许用于该XHR请求。我已经尝试了所有我能想到的东西。我已将*
通配符链接到请求所源自的实际域,以允许*
通配符允许标头。似乎没什么用。它继续产生CORS错误。
任何人都可以帮助我实现这一目标并成功完成直接浏览器上传到S3吗?我不在乎通过哪种方式,我只需要能够完成它。另外,请记住,当涉及到S3时,我是一个新手,所以指令越明确越好。
谢谢!
答案 0 :(得分:1)
尝试为AllowedHeader添加通配符并允许所有方法,如下所示:
<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>
直接上传到Amazon S3的绝佳起点是:
对于js: http://www.designedbyaturtle.co.uk/2013/direct-upload-to-s3-with-a-little-help-from-jquery/
对于php: http://birkoff.net/blog/post-files-directly-to-s3-with-php/
或者,如果您正在寻找开箱即用的解决方案,请查看Plupload
希望这能让你开始!