我正在使用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--
我无法在不改变内容的情况下找到删除这些行的方法。 有人知道我做错了吗?
答案 0 :(得分:0)
实际上,我可以简单地使用 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了解调试提示。
答案 1 :(得分:0)
我刚刚从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