在 Rails 上读取上传的数据

Reading uploaded data on Rails

我正在使用 rails 服务器从应用程序接收数据。 一个简单的 POST 请求接收器实现如下:

  #POST /pcap_uploads/curl
  def curl
    filename||= "#{SecureRandom.urlsafe_base64}.pcap"
    tempfile = Tempfile.new(filename)
    tempfile.binmode
    tempfile << request.body.read
    tempfile.rewind
    data_params = params.slice(:filename).merge(:tempfile => tempfile)
    data = ActionDispatch::Http::UploadedFile.new(data_params)
    File.open(File.join(Rails.root, "/public/uploads/" << filename), 'w+b') { |f| 
        data.rewind
        while  !data.eof?
          f.write(data.read)
        end
    }
    respond_to do |format|
        format.json { head :ok }
    end
  end

我的问题是写入的数据包含我的二进制文件(pcap格式)被POST包围请求信息如:

--------------------------5625702e57f980bd
Content-Disposition: form-data; name="file"; filename="capture.pcap"
Content-Type: application/octet-stream

<binaryfile content>
--------------------------5625702e57f980bd--

我找不到在不改变我的内容的情况下删除这些行的方法。 有人知道我做错了什么吗?

实际上,我可以简单地使用 params.

中的 :file 参数
      #POST /pcap_uploads/curl
  def curl
    filename||= "#{SecureRandom.urlsafe_base64}.pcap"
    #Rails.logger.debug params.inspect
    #puts params[:file].inspect
    data = params[:file]
    t=  data.tempfile
    File.open(File.join(Rails.root, "/public/uploads/" << filename), 'w+b') { |f| 
        t.rewind
        while  !t.eof?
          f.write(t.read)
        end
    }
    respond_to do |format|
        format.json { head :ok }
    end
   end

感谢 Baldrick 调试提示。

我只留下一个处理从official Rails documentation

上传文件的例子
def upload
  uploaded_io = params[:person][:picture]
  File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
    file.write(uploaded_io.read)
  end
end