画像付きの古いサービスと新しいサービスがあります。イメージを古いものから新しいものに移行したい。そのためには、古いサービスから画像を取得し、それを新しいシナトラ サービスに投稿する必要があります。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サービスで上記のポストメソッドで取得したパラメータは
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
私のサービスでは、次のようなものを取得します:
"#<'UploadIO:0x007fb950373de8>" オブジェクト。これは私がサービスに期待するものではありません。
Net::HTTP と同じ動作を得るにはどうすればよいですか。ミドルウェアで何かをする必要があると思います。微調整してみましたが、まだ初心者です。