我上传文件时遇到问题:
这是我的HTML:
<%= form_tag import_test_path, multipart: true do %>
<%= file_field_tag :file, :style => 'display:inline; margin-top:-10px' %>
<%= submit_tag 'Hochladen', :class => 'btn btn-sm btn-info' %>
<% end %>
首先我尝试上传它并在我的控制器中处理它,如下所示:
def import
widgets = DBF::Table.new(params[:file], nil, 'cp1252')
w = widgets.find(6)
p = Patient.new
p.vorname = w.vorname
p.name = w.name
p.geburtsdatum = w.geburt
p.save
respond_to do |format|
format.html {redirect_to :back }
end
end
但这引发了一个错误:
no implicit conversion of ActionDispatch::Http::UploadedFile into String
in line: DBF::Table.new(params[:file], nil, 'cp1252')
接下来我尝试先生成一个Tempfile:
def import
file = Tempfile.new(params[:file])
widgets = DBF::Table.new(file, nil, 'cp1252')
w = widgets.find(6)
p = Patient.new
p.vorname = w.vorname
p.name = w.name
p.geburtsdatum = w.geburt
p.save
respond_to do |format|
format.html {redirect_to :back }
end
end
但这也证明是一个错误:
unexpected prefix_suffix: #<ActionDispatch::Http::UploadedFile:0x6793d10 @tempfile=# <Tempfile:C:/Users/EMMANU~1/AppData/Local/Temp/RackMultipart20131110-6816-ogkd3i>, @original_filename="patient.DBF", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"patient.DBF\"\r\nContent-Type: application/octet-stream\r\n">
in line: file = Tempfile.new(params[:file])
我错了什么?谢谢,祝你有愉快的一天!
答案 0 :(得分:3)
访问params[:file]
是ActionDispatch::Http::UploadedFile
,它只是用于存储上传内容的TmpFile的包装。
您需要从该IO对象read
获取内容。
答案 1 :(得分:0)
尝试DBF::Table.new(params[:file].path, nil, 'cp1252')