Ruby使用非libcurl库上传文件

时间:2013-01-04 18:16:09

标签: ruby sinatra httpclient

出于纯粹的好奇心,我使用以下行将文件上传到Sinatra应用程序:

curl -silent --location --upload-file #{file} http://0.0.0.0:3000/sent/

它就像魅力一样。但是,如果我想使用像HTTPClient这样的纯ruby解决方案,那么获得相同结果的代码是什么?你能举个例子吗?

注意:我对 libcurl 相关解决方案不感兴趣。如果还有另一个gem,除了 HTTPClient ,可以在纯ruby 中实现这一点,请分享。

最好的问候

1 个答案:

答案 0 :(得分:1)

Ruby的Net::HTTP允许您上传文件。来自文档:

uri = URI('http://www.example.com/todo.cgi')
req = Net::HTTP::Post.new(uri.path)
req.set_form_data('from' => '2005-01-01', 'to' => '2005-03-31')

res = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(req)
end

case res
when Net::HTTPSuccess, Net::HTTPRedirection
  # OK
else
  res.value
end

将文件的正文添加到set_form_data哈希,您应该在路上。