在过去的两天里,我一直在尝试使用直接上传到 S3 的 dropzone.js 在表单中创建一个 uploader 。
没有 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>
希望大家帮忙
现在很挣扎!
一切顺利 蒂亚戈
最佳答案
这个错误的原因是,我们有两个文件参数,所以 amazon s3 认为我们试图在同一个请求中发送 2 个文件。
<%= file_field_tag :file, multiple: false%>
在表单中添加一个文件参数,dropzone 添加另一个文件参数,对此有两种解决方案。
- 快速修复 - 只需简单地删除表单中的 file_field,一切都会正常进行。
- 解决方案 - 添加一个后备类,如下所示,这样 dropzone.js 会自动将其静音。
//像这样,
<%= content_tag :div, class: "fallback" do %>
<%= file_field_tag :file, multiple: false%>
<% end %>
当禁用或不支持 javascript 时,正常输入文件将以这种方式显示。
关于javascript - S3 直接上传 + Rails + Dropzone.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23520850/