无法上传文件

我上传文件时遇到问题:

这是我的HTML:

  'display:inline; margin-top:-10px' %>  'btn btn-sm btn-info' %>  

首先我试着简单地上传它并在我的控制器中处理它,如下所示:

  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 

但这也certificate是一个错误:

  unexpected prefix_suffix: #<ActionDispatch::Http::UploadedFile:0x6793d10 @tempfile=# , @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]) 

我错了什么? 感谢,并有一个愉快的一天!

访问params[:file]是一个ActionDispatch::Http::UploadedFile ,它只是用于存储上传内容的TmpFile的包装器。

您需要从该IO read类似对象以获取内容。

试试DBF::Table.new(params[:file].path, nil, 'cp1252')