1

我正在尝试从上传的文件中获取 original_filename 和其他内容。

视图中的代码如下所示:

<%= form_for(@datafile, url: user_data_files_path) do |f| %>

    <%= f.file_field :data%>

    <%= f.submit "Upload file", class: "btn btn-large btn-primary" %>
<% end %>

调试控制台中的参数值为:

{"utf8"=>"✓",

 "authenticity_token"=>"Z4suAyN3zOpz1qBKllaDs3L4flz6Rm6HnN0CIdJvmcE=",

 "data_file"=>{"data"=>#<ActionDispatch::Http::UploadedFile:0x007ff46b74e390 @tempfile=#<Tempfile:/var/folders/gf/lft827zj55b5wdj3208vpsy40000gn/T/RackMultipart20130803-635-q6wtb6>,

 @original_filename="application.html.erb",

 @content_type="application/octet-stream",

 @headers="Content-Disposition: form-data; name=\"data_file[data]\"; filename=\"application.html.erb\"\r\nContent-Type: application/octet-stream\r\n">},

 "commit"=>"Upload file",

 "user_id"=>"1"}

我正在尝试在我的控制器中检索诸如 original_filename 和数据之类的内容:

  def create

    @datafile = DataFile.new

    uploaded_io = params[:data_file]

    flash[:error]= '' + uploaded_io[:@original_filename]


    redirect_to new_user_data_file_url
  end

但我得到一个错误:在线no implicit conversion of nil into Stringflash[:error]我试图通过以下方式访问:

uploaded_io[:original_filename]

这给了我同样的错误,或者

uploaded_io.original_filename

我得到NoMethodError 了我看到的奇怪的事情是它flash[:error]= '' + uploaded_io.to_s给了我 data_file 哈希,所以..我不明白发生了什么。

有人可以帮我解决这个问题吗?

4

1 回答 1

3

我发现错误在于认为params[:data_file]包含该文件。该文件在params[:data_file][:data](查看视图的表单)中,然后该文件具有方法(变量实例)original_filename。这样做params[:data_file][:data].original_filename会返回文件的名称。

于 2013-08-04T14:18:48.697 回答