将文件上载内容转换为二进制文件而不保存(Rails)

时间:2011-08-17 11:02:40

标签: ruby ruby-on-rails-3 file file-upload

我有一个rails 3应用程序,我使用'face'宝石来引用Face.com API。 api方法采用以下形式的参数:

:file => File.new(path_to_file, 'rb')

有效。

我正在尝试更改应用程序的流程,以便可以通过表单上传文件,使用RMagick进行一些操作,然后进行API调用,所有这些都不会将文件保存到磁盘。

我可以用

生成RMagick'Image'
image = Magick::Image.from_blob(upload_image_field.read)

然后我可以使用RMagick操作文件,甚至可以使用以下结果将结果保存到数据库中:

self.data = image.to_blob #normally 'upload_image_field.read' if not using RMagick

我的问题是我无法将图像文件(或blob)更改为API将识别的内容(不将其保存到磁盘,然后在磁盘上引用该文件)。

例如,在API方法中使用此方法失败:

:file => image.to_blob 

如何将blob转换为与

相同的格式
File.new(path_to_file, 'rb')

由于

1 个答案:

答案 0 :(得分:1)

好吧,我在这个问题上可能错了......但我想挖掘它。不幸的是,你只需将其保存为文件即可。原因是因为API进行了HTTP POST。不幸的是,这需要是一个文件。

参考文献from: [https://github.com/rociiu/face/tree/master/lib/face]

recognition.rb

def faces_detect(opts={})
    opts.assert_valid_keys(:urls, :file, :detector, :attributes, :callback, :callback_url)
    make_request(:faces_detect, opts)
end

utils.rb

def make_request(api_method, opts={})
   ....
    response = JSON.parse( RestClient.post(API_METHODS[ api_method ], opts.merge(api_crendential)).body )
   ....
  end

那么,为什么保存到文件会有问题呢?