我正在整合Carrierwave_Direct和Jquery文件上传。一切正常。文件直接上传到S3而没有错误。但是,浏览器无法使用关键参数(例如
)将用户重定向到新网址 http://example.com?bucket=your_fog_directory&key=uploads%2Fguid%2Ffile.ext&etag=%22d41d8cd98f00b204e9800998ecf8427%22
。
在js控制台上,错误消息是
XMLHttpRequest cannot load https://example.s3.amazonaws.com/.
The request was redirected to 'http://example.com/users/settings?bucket=example&key=uploads…F1389525416-2-3762%2Fexample.jpg&etag=%225a44c7ba5bbe4ec867233d67e4806848%22',
which is disallowed for cross-origin requests that require preflight.
我已经在S3上设置了CORS:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://example.herokuapp.com</AllowedOrigin>
<AllowedOrigin>http://localhost:3000</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
JS代码:
$('#new_avatar_uploader').each(function(){
var form = $(this),
progress_bar = $('#new_avatar_uploader').find('.progress-bar');
form.fileupload({
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
progress_bar.css("visibility","visible");
progress_bar.css(
'width',
progress + '%'
);
},
});
});
请提前帮助,谢谢。
答案 0 :(得分:0)
这是为rails app启用CORS的方法:
的Gemfile:
gem 'rack-cors'
config.ru(在文件底部添加):
# ...
require 'rack/cors'
use Rack::Cors do
allow do
origins 'http://example.herokuapp.com'
resource '*',
:headers => :any,
:methods => [:put, :post, :delete, :options, :head],
:max_age => 0,
:expose => :location
end
end
答案 1 :(得分:0)
也遇到了这个问题,即使在添加机架/角落并允许所有内容之后,也无法使重定向工作。相反,我最终使用action_status而不是重定向。这将返回一个XML文档,其中包含您可以自己处理的必要信息(密钥)。
必要的变更如下。
在你的Carrierwave配置中:
config.use_action_status = true
设置上传器时,请更改:
uploader.success_action_redirect = url
到
uploader.success_action_status = "201" # must be a string, or S3 throws errors
在表单中,添加:
= f.file_field :voter_file, :use_action_status => true
然后,在你的Javascript(或,coffeescript)中:
form.fileupload
dataType: 'xml'
success: (retdata) ->
# deal with the xml
希望有所帮助。