使用jQuery fileupload插件直接上传到Amazon S3

时间:2012-09-19 11:30:36

标签: jquery ruby-on-rails amazon-s3

我正在使用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.

2 个答案:

答案 0 :(得分:7)

我最近写了一篇关于如何直接将文件上传到s3的简短教程,希望它能帮到你:

http://pjambet.github.com/blog/direct-upload-to-s3/

答案 1 :(得分:4)

亚马逊AWS最近宣布支持CORS。这意味着您不必使用iframe方法直接上传到S3。现在您可以毫无后顾之忧地使用HTML5。

它还允许您使用拖放等功能。

要启用直接HTML5上传,您只需在存储桶属性中调整存储桶CORS设置。