ruby rest_client,mimetype无法识别

时间:2014-08-07 21:36:11

标签: ruby-on-rails rest-client

我有一个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=#>

1 个答案:

答案 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