0

ruby プロジェクトで、POSTS リクエストをリッスンしているサーバーに画像を送信しようとしています。余分な必要なgemの使用は避けたいです。Ruby 1.9.3 を使用していますが、net/http マルチポートはサーバーと次のコードでサポートされていません。

require 'net/http'  
require "uri"

image = File.open(image.path, 'r')

url = URI("http://someserver/#{image_name}")
req = Net::HTTP.new(url.host, url.port)
Net::HTTP.new(url.host, url.port)
headers = {"X-ClientId" => client_id, "X-ClientSecret" => client_secret, "Content-Type" => "image/jpeg"}
response, body = req.post(url.path, image, headers)

次のエラー メッセージでクラッシュします。

http.rb:1932:in `send_request_with_body': undefined method `bytesize' for #<File:0x007ffdcd335270> (NoMethodError)

以下はbashで成功しますが:

curl -i -X POST --data-binary @./output.jpg -H 'X-ClientId: ##..##' -H 'X-ClientSecret: ##..##' http:/someserver/output.jpg

何がうまくいかないのですか?

前もって感謝します

4

1 に答える 1

0

Rubyスクリプトについては、これを参照してください- http://www.rubyinside.com/nethttp-cheat-sheet-2940.html

または
レールの場合は、「httmultiparty」を使用できます。
これを読んでください - https://github.com/jwagener/httmultiparty

ここにあなたができる例があります -

コントローラーメソッドに追加するだけです-

class SomeController <  ApplicationController
   def send_file
       response = Foo.post('/', :query => {
                  :file => File.new('abc.txt') 
       })
       # here Foo is class_name which is present in model/foo.rb
       response.code # it give response code success or failure.
   end
end

モデルでは、任意のファイルを作成し、foo.rb を作成して、次のコードを追加します -

require 'httmultiparty'
class Foo
   include HTTMultiParty
   base_uri 'my/path' #url where to send file 
end  

params[:file] を実行するだけで、パス上のファイルを取得できます。これはあなたを助けると思います。

于 2012-12-05T12:38:26.150 に答える