1

我正在使用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 上传器是这样初始化的:

  $(function () {

      $('#fileupload').fileupload({

        forceIframeTransport: true

      });

  });

一切正常,我看到了 UI,但是当文件的进度条完成时,它给了我一个错误,并且文件实际上并没有被上传。

类型错误:iframe 未定义。(Firefox)TypeError:TypeError:无法读取未定义的属性“0”(Chrome)

可能是什么问题呢?

编辑:

查看 Javascript 控制台,我收到这样的错误(替换了真实地址):

Unsafe JavaScript attempt to access frame with URL BUCKETURL from frame with URL SERVERURL. Domains, protocols and ports must match.
4

2 回答 2

7

我最近写了一篇关于如何将文件直接上传到 s3 的简短教程,希望对您有所帮助:

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

于 2012-09-30T21:01:44.290 回答
4

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

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

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

于 2012-09-21T16:22:55.610 回答