2011-08-17 13 views
1

Face.com APIを参照するために 'face'宝石を使用しているレール3アプリがあります。 apiメソッドは次の形式のパラメータをとります:ファイルアップロードの内容を保存せずにバイナリファイルに変換する(レール)

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

フォームを介してファイルをアップロードできるようにアプリケーションのフローを変更しようとしています。ファイルをディスクに保存せずに、RMagickでいくつか作業してからAPI呼び出しを行います。私はその後、RMagickを使ってファイルを操作しても、してデータベースに結果を保存することができます

image = Magick::Image.from_blob(upload_image_field.read) 

とRMagick「画像」を生成することができます

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

私の問題は、Iイメージファイル(またはBLOB)をAPIが認識できるものに変更することはできません(ディスクに保存してからディスク上のファイルを参照する必要はありません)。 APIの方法でこれを使用した例

は失敗します。私はOK、私が間違っている可能性が、彼は

File.new(path_to_file, 'rb') 

おかげ

答えて

1

と同じ形式にブロブ変換するにはどうすればよい

:file => image.to_blob 

これには...しかし、私はこれを掘り起こそうと思っていました。残念ながら、ファイルとして保存するだけで済むようになります。理由は、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 

だから、なぜそれが、ファイルに保存するには問題がありますか?

+0

私はハードドライブへの余分な書き込みを排除しようとしていました。 – CHsurfer

+0

私は考えました。パフォーマンスを向上させるためにラムドライブに書き込めますか? –

+0

正直言って、私は分かりません。ポストデータを使って自分のFace.com APIをロールする方が簡単かもしれません。 – CHsurfer

関連する問題