我正在学习 Ruby + Sinatra,并在这里找到了一篇关于如何上传文件的好帖子。
post '/upload/:filename' do
userdir = "./upload"
FileUtils.mkdir_p(userdir) unless File.exists?(userdir)
filename = File.join(userdir, params[:filename])
datafile = params[:data]
File.open(filename, 'wb') do |file|
file.write(datafile[:tempfile].read)
end
end
我可以使用以下 cURL 命令很好地上传文件。
curl -v -F "data=@/Users/me/Desktop/test.pdf" http://localhost:4567/upload/test.pdf
但现在我决定使用 JSON 来处理所有传入/传出响应。我试过这个,但它似乎没有用。
curl -i -X POST -H Accept:application/json -H Content-Type:application/json -d '{file:{filename:"test.pdf",md5sum:"ab3d2f"}}' --data-binary @/Users/me/Desktop/test.pdf 'http://localhost:4567/upload/test.pdf'
我也收到这样的错误:
NoMethodError at /upload/test.pdf
undefined method `get' for #<WebTest:0x101374dd8>
file: web.rb location: POST /upload/:filename line: 48
我现在该怎么办?
编辑:
第48行是这个file.write(datafile[:tempfile].read
请帮忙!