Ruby – 使用RestClientpost上传文件
我有一个cURL,我试图转换成Ruby。
cURL是这样的:
curl -i -k -H "Accept: application/json" -H "Authorization: token" -H "Content-Type: image/jpeg" -H "Content-Length: 44062" --data-binary "gullfoss.jpg" http://sofzh.miximages.com/ruby/gullfoss.jpg') result = RestClient.post('http://www.someurl.com/objects',image,{'upload' => image, 'Accept' => 'application/json', 'Authorization' => 'token', 'Content-Type' => 'image/jpeg', 'Content-Length' => '44062'})
Ruby代码给了我一个400 Bad Request。 授权或其他标题不是问题。 我认为问题在于将–data-binary转换为Ruby。
任何帮助赞赏。
谢谢,阿德里安
有一些事情可能会导致问题。
- 您希望将实际的
File
对象与RestClient
使用,因此请使用File.open
; 它返回一个文件对象。 - 您在请求中将图像对象包括两次; 您的问题并未明确说明实际内容。 例如,您正在将有效负载元素与标题混合在一起。 根据
RestClient.post
的签名,它接受参数url, payload, headers={}
,您的请求应采用以下两种forms之一:
端点是否期望命名参数? 如果是,请使用以下内容:
技术1:有效负载包括名为“upload”的字段或参数,并且值设置为图像对象
result = RestClient.post( 'http://www.someurl.com/objects', { 'upload' => image }, 'Accept' => 'application/json', 'Authorization' => 'token', 'Content-Type' => 'image/jpeg', )
端点是否期望进行简单的文件上传? 如果是,那么使用:
技术2:图像文件对象作为唯一有效载荷发送
result = RestClient.post( 'http://www.someurl.com/objects', image, 'Accept' => 'application/json', 'Authorization' => 'token', 'Content-Type' => 'image/jpeg', )
请注意,我没有包含'Content-Length'
标题; 使用RestClient
时通常不需RestClient
因为它在处理文件时会为您插入。
还有另一种使用RestClient
发送有效负载的方法。
请务必阅读github上的官方文档 。
我也是RestClient
所以如果我错了,在这种情况下不要太苛刻; 我会立即纠正我的任何误解。 希望这可以帮助!