Ruby中如何通过HTTP将文件作为多部分/表单数据发布?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我想做一个HTTP POST,使它看起来像从浏览器中发布的HTML表单。具体来说,发布一些文本字段和一个文件字段。

张贴文本字段很简单,在net/http rdocs中有一个例子

NET::http看起来并不是好主意。curb看上去不错。

提问于
用户回答回答于

我喜欢restclient。它用多部分表单数据等特性封装了net/http:

require 'rest_client'
RestClient.post('http://localhost:3000/foo', 
  :name_of_file_param => File.new('/path/to/file'))

它还支持串流。

gem install rest-client

用户回答回答于

下面是一个例子:

require 'net/http/post/multipart'

url = URI.parse('http://www.example.com/upload')
File.open("./image.jpg") do |jpg|
  req = Net::HTTP::Post::Multipart.new url.path,
    "file" => UploadIO.new(jpg, "image/jpeg", "image.jpg")
  res = Net::HTTP.start(url.host, url.port) do |http|
    http.request(req)
  end
end

你可以在这里看看:http://github.com/nicksieger/multipart-post

或用以下方式安装:

$ sudo gem install multipart-post

如果通过SSL进行连接,则需要像这样启动连接:

n = Net::HTTP.new(url.host, url.port) 
n.use_ssl = true
# for debugging dev server
#n.verify_mode = OpenSSL::SSL::VERIFY_NONE
res = n.start do |http|

扫码关注云+社区