从Rails中的上传文件中获取数据

时间:2013-08-03 21:23:46

标签: file ruby-on-rails-4 upload get

我正在尝试从上传的文件中获取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 %>

调试控制台中的params值为:

{"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和data之类的东西,在我的控制器中我有:

  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 String行中收到了错误flash[:error]。 我试图通过以下方式访问:

uploaded_io[:original_filename]

给了我同样的错误,或者

uploaded_io.original_filename

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

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

1 个答案:

答案 0 :(得分:2)

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