【发布时间】:2012-11-20 22:09:10
【问题描述】:
我正在上传多个文件,但我没有在表单和控制器之间正确传递参数 - 不太确定我缺少什么。
表格很简单:
<%= form_tag({:controller => :admins, :action => :upload_json}, {:multipart => true, :method => :post, :html => { :class => "form-horizontal"}}) do %>
<fieldset>
<legend>Data</legend>
<ol class="field-list">
<li>
<label for="data-file">JSON File</label>
<%= file_field_tag 'jsonfileupload', multiple: true %>
</li>
</ol>
<div class="form-actions">
<%= submit_tag "Upload" %>
</div>
</fieldset>
<% end %>
在控制器中,我这样做只是为了看看传递了什么:
@output = params[:jsonfileupload]
在视图中,我只是执行debug 来查看返回的内容,它只提取任何一组选定文件的最后一个文件。
#<ActionDispatch::Http::UploadedFile:0x007f95d0c21010 @original_filename="4987.json", @content_type="application/json", @headers="Content-Disposition: form-data; name=\"jsonfileupload\"; filename=\"4987.json\"\r\nContent-Type: application/json\r\n", @tempfile=#<File:/var/folders/0p/6lq88m950mgftng1qm1w63_8000194/T/RackMultipart20121114-389-t9l7vs>>
不确定我缺少什么来让它返回所有选定的文件。感谢您的帮助!
【问题讨论】:
-
你错过了
original_filename,把这个@output = params[:jsonfileupload]改成@output = params[:jsonfileupload].original_filename -
感谢@Kien Thanh。如果我选择多个文件,我仍然看不到多个文件。我只选择了最后一个文件。
-
我应该注意,这个表单没有绑定到模型,因为它只是做一些临时数据加载然后被丢弃。
-
理论上,我认为通过传递
multiple: true,它们将作为文件数组发送。然后我可以遍历控制器中的数组。 -
除非您使用一些客户端脚本,否则不可能将多个文件上传到单个文件字段 AFAIK。您检查过 JQuery 文件上传吗?实现起来非常简单。有一个专业版 railscast 剧集将引导您完成所涉及的每一步。
标签: ruby-on-rails-3 json upload