我正在使用https://github.com/blueimp/jQuery-File-Upload将文件上传到我的Rails应用上的S3(安装此gem:https://github.com/tors/jquery-fileupload-rails)。
这是我的表格。由于我只需要上传文件并稍后创建文档,因此它不是form_for。
<%= form_tag 'Bucket URL SNIP', :multipart => true, :id => "fileupload" do %>
<%= hidden_field_tag 'key', @token %>
<%= hidden_field_tag 'AWSAccessKeyId', ACCESSKEYSNIP %>
<%= hidden_field_tag 'acl', 'public-read' %>
<%= hidden_field_tag 'success_action_status', '200' %>
<%= hidden_field_tag 'policy', controller.s3_policy_document %>
<%= hidden_field_tag 'signature', controller.signature %>
<% end %>
jQuery uploader初始化如下:
$(function () {
$('#fileupload').fileupload({
forceIframeTransport: true
});
});
一切正常,我看到了UI,但是当文件的进度条完成时,它会给我一个错误,而且文件实际上并没有上传。
TypeError:iframe未定义。 (火狐) TypeError:TypeError:无法读取undefined(Chrome)的属性“0”
可能是什么问题?
编辑:
查看Javascript控制台,我收到这样的错误(替换了真实地址):
Unsafe JavaScript attempt to access frame with URL BUCKETURL from frame with URL SERVERURL. Domains, protocols and ports must match.
答案 0 :(得分:7)
我最近写了一篇关于如何直接将文件上传到s3的简短教程,希望它能帮到你:
答案 1 :(得分:4)
亚马逊AWS最近宣布支持CORS。这意味着您不必使用iframe方法直接上传到S3。现在您可以毫无后顾之忧地使用HTML5。
它还允许您使用拖放等功能。
要启用直接HTML5上传,您只需在存储桶属性中调整存储桶CORS设置。