0

在一个 ruby​​ 项目中,我试图将图像发送到侦听 POSTS 请求的服务器。我想避免使用额外的必要宝石。我正在使用 ruby​​ 1.9.3 并且服务器不支持 net/http Multiport 和以下代码:

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

浏览这个红宝石脚本 - http://www.rubyinside.com/nethttp-cheat-sheet-2940.html

或者
对于rails,你可以使用'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 回答