我有一个RestClient执行以下调用:
RestClient::Request.new(
:method => "post",
:url => "http://myservice.com/call.json",
:payload => {'document[data]' => File.new(e.image.path, 'rb')},
:headers => { :accept => :json, :content_type => :json}
).execute
我已经实现了一个接收其余调用的小测试服务器,因为我不是REST服务的作者。 您可以在下面找到请求的实际内容和内容。 我的问题是:我在哪里指定附加文件的mime类型?
它是什么:
#<ActionDispatch::Http::UploadedFile:0x0... @original_filename="x.pdf", @content_type="text/plain", @headers="Content-Disposition: form-data; name=\"document[data]\"; filename=\"x.pdf\"\r\nContent-Type: text/plain\r\n", @tempfile=#>
应该是什么:
#<ActionDispatch::Http::UploadedFile:0x0... @original_filename="x.pdf", @content_type="application/pdf", @headers="Content-Disposition: form-data; name=\"document[data]\"; filename=\"x.pdf\"\r\nContent-Type: application/pdf\r\n", @tempfile=#>
答案 0 :(得分:2)
奇怪的是,RestClient应该能够根据文件扩展名获取mime类型。
无论如何,如果我没记错,根据文件没有办法为多部分段传递mime类型,但Payload类中有代码可以查找content_type。这可能已经修复,但在解决此问题之前,此黑客行为应该有效。
module MyModule
def content_type
"application/pdf"
end
end
f = File.new(e.image.path, 'rb')}
f.extend(MyModule)
RestClient::Request.new(
:method => "post",
:url => "http://myservice.com/call.json",
:payload => {'document[data]' => f},
:headers => { :accept => :json, :content_type => :json}
).execute