IE 10支持CORS.Amazon S3支持CORS.
我们在所有浏览器中都有直接从站点到S3的上传工作,但是IE 10(没有使用IE 9-).它的工作原理如下:
用户选择一个文件(拖放或从文件输入中选择)
(POST)我们必须在进入S3($.post('/static/sign_asset', { ... })之前"签署"该请求,该回复具有一整天都能完美激活的回调.
(POST)然后我们使用文件数据和来自签名的数据将XHR设置为S3.
var xhr = new XMLHttpRequest();
// etc
var fd = new FormData();
// etc
xhr.open('POST', url, true);
xhr.send(fd);
文件上传,一切都在所有浏览器中完美运行,除了......
在Access-Control-Allow-Origin标头中找不到Origin null.和XMLHttpRequest:网络错误0x80070005,访问被拒绝.我们response.headers["Access-Control-Allow-Origin"] = "*"在发送响应的控制器中设置后,没有其他浏览器显示此信息.即使我们有这个错误,Chrome也会显示此错误,但请求仍然会通过.
尽管出现此错误,该文件实际上仍会上传到S3.Amazon S3做了303重定向的事情 - 这是我们验证文件是否已成功上传.
(GET)这是对CORS Ajax请求的重定向,因此"重定向"不刷新它刚回来的页面并命中我们的服务器.IE 10使用Content-Type进行此请求multipart/form-data; boundary=---------------------------7dd2ce2201da
这就是导致Rails出错的原因.
Started GET "/static/signed/asset/tsabat/83ee6840-7158-0130-c19b-28cfe912f6ff?bucket=s.cdpn.io&key=5%2Fauthor-tim_2.jpg&etag=%2260fb3876d516553ff6f3a018066b3250%22" for 127.0.0.1 at
2013-03-17 10:46:36 -0700
EOFError - bad content body:
(gem) rack-1.4.5/lib/rack/multipart/parser.rb:74:in `block in Rack::Multipart::Parser#fast_forward_to_first_boundary' (gem) rack-1.4.5/lib/rack/multipart/parser.rb:72:in `Rack::Multipart::Parser#fast_forward_to_first_boundary'
(gem) rack-1.4.5/lib/rack/multipart/parser.rb:72:in `Rack::Multipart::Parser#parse' …Run Code Online (Sandbox Code Playgroud)