在 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
我正在使用 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