Ruby: 如何以multipart/form-data格式通过HTTP上传文件?

127

我希望进行一次HTTP POST请求,看起来像是从浏览器中提交的HTML表单。具体地,需要提交一些文本字段和一个文件字段。

提交文本字段很简单,net/http的rdocs中已经有示例了,但我不知道如何同时提交文件。

Net::HTTP似乎不是最好的选择。Curb看起来不错。

14个回答

0

0

我遇到了同样的问题(需要发布到jboss web服务器)。Curb对我来说很好用,但是当我在代码中使用会话变量时(ruby 1.8.7 on ubuntu 8.10),它会导致Ruby崩溃。

我查看了rest-client文档,没有发现多部分支持的迹象。我尝试了上面的rest-client示例,但是jboss说http post不是多部分的。


0

multipart-post宝石与Rails 4 Net :: HTTP非常配合,没有其他特殊的宝石

def model_params
  require_params = params.require(:model).permit(:param_one, :param_two, :param_three, :avatar)
  require_params[:avatar] = model_params[:avatar].present? ? UploadIO.new(model_params[:avatar].tempfile, model_params[:avatar].content_type, model_params[:avatar].original_filename) : nil
  require_params
end

require 'net/http/post/multipart'

url = URI.parse('http://www.example.com/upload')
Net::HTTP.start(url.host, url.port) do |http|
  req = Net::HTTP::Post::Multipart.new(url, model_params)
  key = "authorization_key"
  req.add_field("Authorization", key) #add to Headers
  http.use_ssl = (url.scheme == "https")
  http.request(req)
end

https://github.com/Feuda/multipart-post/tree/patch-1


0

使用 http.rb gem:

HTTP.post("https://here-you-go.com/upload",
          form: {
            file: HTTP::FormData::File.new(file_path)
          })

详情


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接