S3直接上传+ Rails + Dropzone.js

时间:2014-05-07 14:38:09

标签: javascript ruby-on-rails amazon-s3 dropzone.js

在过去的两天里,我一直在尝试使用dropzone.js在表单中创建一个上传器,直接上传到S3。

没有Dropzone它工作正常(遵循本教程:http://www.blitztheory.com/direct-upload-with-s3_direct_upload/

问题在于,在我的平台中,Dropzone被广泛使用,并且希望保留格式。

亚马逊返回的错误如下:

<?xml version="1.0" encoding="UTF-8"?> <Error><Code>InvalidArgument</Code><Message>POST requires exactly one file upload per request.</Message><ArgumentValue>2</ArgumentValue><ArgumentName>file</ArgumentName><RequestId>0B044292C584D2F3</RequestId><HostId>X6S+LR28zGb7wftDgG3gKYCWC8SlHI/sr0PN7ICR2oohtFe5BEib9O2+d7n0b9azPEMTA2USlng=</HostId></Error>

形式:

<%= s3_uploader_form callback_url: raffles_url,
  id: "s3_uploader",
  acl: "private",
  callback_param: "direct_upload_url",
  max_file_size: 40.megabytes, class: "dropzone" do %>
  <%= hidden_field_tag  "Content-Type", "" %>
  <%= hidden_field_tag :file, multiple: false %>
<% end %>
<br/>


<script>
Dropzone.options.myAwesomeDropzone = {
  paramName: "file", // The name that will be used to transfer the file
  maxFilesize: 2, // MB
  uploadMultiple: false
};
</script>

希望任何人都可以提供帮助

现在苦苦挣扎!

一切顺利 蒂亚戈

2 个答案:

答案 0 :(得分:3)

这里有一篇很棒的文章 http://sudharti.github.io/articles/dropzone-rails/

只需将上传器更改为:雾,您应该启动并运行

答案 1 :(得分:2)

出现此错误的原因是,我们有两个文件参数,因此amazon s3认为我们尝试在同一请求中发送2个文件。

<%= file_field_tag :file, multiple: false%> 

在添加文件参数的表单中,dropzone添加另一个文件参数,有两个解决方案。

  1. 快速修复 - 只需删除表单中的file_field即可,一切正常。
  2. 解决方案 - 添加一个后备类,如下所示,以便dropzone.js自动将其静音。
  3. //像这样,

    <%= content_tag :div, class: "fallback" do %>
    <%= file_field_tag :file, multiple: false%>
    <% end %>
    

    当禁用或不支持javascript时,普通输入文件将以这种方式显示。