【问题标题】:How to send multpart/form-data file along with other form parameters in ruby net/http?如何在 ruby​​ net/http 中发送 multipart/form-data 文件以及其他表单参数?
【发布时间】:2015-07-08 15:18:45
【问题描述】:

我想使用 POST 方法上传一个内容类型为 multipart/form-data 的文件以及其他表单参数。我已尝试使用此代码,但出现错误。

require 'net/http/post/multipart'

url = URI.parse('https:action/upload-v1/file')
File.open("rough.txt") do |text|
  req = Net::HTTP::Post::Multipart.new url.path,
    "file" => UploadIO.new(text, "text/plain", "rough.txt")

    req.basic_auth 'nikhil', 'Lee'

    req.verify_mode = OpenSSL::SSL::VERIFY_NONE
    req.use_ssl = true
    req.set_form_data('deviceId' => '2366', 'checksum' => '132654798', 'fileSize' => '1260', 'fileType' => 'configuration', 'compressionType' => 'Z')
  res = Net::HTTP.start(url.host, url.port) do |http|
    response = http.request(req)
    puts response.body

  end
end

错误:

C:\Ruby193>ruby TestMultipart.rb
TestMultipart.rb:10:in `block in <main>': undefined method `verify_mode=' for #<Net::HTTP::Post::Multipart POST> (NoMethodError)
        from TestMultipart.rb:4:in `open'
        from TestMultipart.rb:4:in `<main>'

【问题讨论】:

    标签: ruby multipartform-data net-http


    【解决方案1】:

    你可以试试这个。

    require 'net/http/post/multipart'
    
    url = URI.parse('https:action/upload-v1/file')
    File.open("rough.txt") do |text|
        "file" => UploadIO.new(text, "text/plain", "rough.txt")
        req = Net::HTTP::Post::Multipart.new url.path
        req.basic_auth 'nikhil', 'Lee'
        req.set_form_data('deviceId' => '2366', 'checksum' => '132654798', 'fileSize' => '1260', 'fileType' => 'configuration', 'compressionType' => 'Z')
        res = Net::HTTP.start(url.host, url.port, :use_ssl => url.scheme == 'https') do |http|
           http.verify_mode = OpenSSL::SSL::VERIFY_NONE
           response = http.request(req)
           puts response.body
      end
    end
    

    【讨论】:

    • 我使用上面的代码,但现在我收到另一个错误消息:C:/Ruby193/lib/ruby/1.9.1/net/http.rb:673:in use_ssl=': use_ssl value changed, but session already started (IOError) from TestMultipart.rb:11:in block (2级别)在
      ' 中来自 C:/Ruby193/lib/ruby/1.9.1/net/http.rb:746:in start' from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:557:in start' 来自 TestMultipart.rb:10:in block in &lt;main&gt;' from TestMultipart.rb:4:in open' 来自 TestMultipart .rb:4:in `
      '
    • 我已修复,请重试。
    • C:\Ruby193>ruby TestMultipart.rb C:/Ruby193/lib/ruby/1.9.1/net/http.rb:673:in use_ssl=': use_ssl value changed, but session already started (IOError) from TestMultipart.rb:12:in block (2 个级别) in
      ' 来自 C:/Ruby193/lib/ruby/1.9.1/net/http.rb:746:in start' from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:557:in start' 来自 TestMultipart.rb:11:in block in &lt;main&gt;' from TestMultipart.rb:5:in open' 来自 TestMultipart.rb:5:在`
      '
    • 你把http.use_ssl = true改成http.use_ssl = (url.scheme == "https")
    • 我认为我们不应该在设置 use_ssl 之前启动 HTTP 连接
    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多