【问题标题】:post image with faraday as parameter以法拉第为参数发布图像
【发布时间】:2012-08-22 04:51:24
【问题描述】:

我有一个旧服务和一个带有图像的新服务。我想将图像从旧迁移到新。为此,我需要从旧服务中获取图像,然后将其发布到新的 sinatra 服务。 我能够使用 NET::HTTP 以我想要的格式发布图像

  url = URI.parse('http://0.0.0.0:9292/')
  File.open("./Belgium.png") do |jpg|
   req = Net::HTTP::Post::Multipart.new url.path, {"image" => UploadIO.new(jpg, "image/jpeg", "Belgium.jpg"), id:4234}
    res = Net::HTTP.start(url.host, url.port) do |http|
      http.request(req)
    end
  end

我在 sinatra 服务中使用上述 post 方法获得的参数是

params = {"image"=>
  {:filename=>"Belgium.jpg", :type=>"image/jpeg",:name=>"image",:tempfile=> #<File:/var/folders/h7/f9cvygqs3lg78kwh24v8yzp80000gn/T/RackMultipart20120827-76057-1f3inkn>,
 :head=> "Content-Disposition: form-data; name=\"image\";filename=\"Belgium.jpg\"\r\nContent-Length: 28228\r\nContent-Type: image/jpeg\r\nContent-Transfer-Encoding: binary\r\n"},
  "id"=>"4234"}

但我无法通过法拉第获得相同的结果。我尝试使用类似的东西:

payload = { :profile_pic => Faraday::UploadIO.new('avatar.jpg', 'image/jpeg') }
Faraday.post 'http://0.0.0.0:9292/', payload

在我的服务中,我得到这样的东西:
"#" 一个对象。这不是我对我的服务的期望。

如何获得与使用 Net::HTTP 相同的行为。我认为它与中间件有关,我尝试过调整,但我仍然是新手。

【问题讨论】:

    标签: ruby-on-rails sinatra net-http faraday


    【解决方案1】:

    怎么样:

    conn = Faraday.new(:url => 'http://0.0.0.0:9292' ) do |faraday|
      faraday.request :multipart
    end
    payload = { :profile_pic => Faraday::UploadIO.new('avatar.jpg', 'image/jpeg') }
    conn.post 'http://0.0.0.0:9292/', payload
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2013-09-13
      相关资源
      最近更新 更多