首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby:如何通过HTTP以multipart/form-data的形式发布文件?

Ruby:如何通过HTTP以multipart/form-data的形式发布文件?
EN

Stack Overflow用户
提问于 2008-10-08 18:31:41
回答 10查看 126.5K关注 0票数 122

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

发布文本字段很简单,在net/http rdocs中有一个例子,但是我不知道如何发布一个文件。

HTTP看起来不是最好的主意。curb看起来不错。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2008-11-25 04:03:44

我喜欢RestClient。它用很酷的特性封装了net/http,比如多部分表单数据:

代码语言:javascript
复制
require 'rest_client'
RestClient.post('http://localhost:3000/foo', 
  :name_of_file_param => File.new('/path/to/file'))

它还支持流媒体。

gem install rest-client将帮助您入门。

票数 104
EN

Stack Overflow用户

发布于 2010-04-09 06:12:45

关于Nick Sieger的multipart-post库,我怎么说都不为过。

它添加了对直接到Net::HTTP的多部分发布的支持,消除了您手动担心边界或大型库的需要,这些边界或大型库的目标可能与您自己的不同。

下面是一个关于如何在README中使用它的小示例

代码语言:javascript
复制
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

或者使用以下命令进行安装:

代码语言:javascript
复制
$ sudo gem install multipart-post

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

代码语言:javascript
复制
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|
票数 39
EN

Stack Overflow用户

发布于 2017-10-10 22:29:55

另一个仅使用标准库的方法:

代码语言:javascript
复制
uri = URI('https://some.end.point/some/path')
request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'If you need some headers'
form_data = [['photos', photo.tempfile]] # or File.open() in case of local file

request.set_form form_data, 'multipart/form-data'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| # pay attention to use_ssl if you need it
  http.request(request)
end

尝试了很多方法,但只有一种方法对我有效。

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/184178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档