Преобразование содержимого загрузки файла в двоичный файл без сохранения (Rails) - PullRequest
1 голос
/ 17 августа 2011

У меня есть приложение rails 3, в котором я использую гем 'face' для ссылки на API Face.com. Метод 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

Моя проблема в том, что я не могу изменить файл изображения (или большой двоичный объект) на что-то, что распознает API (без сохранения его на диск и последующей ссылки на файл на диске).

Например, использование этого в методе API завершается ошибкой:

:file => image.to_blob 

Как конвертировать блоб в тот же формат, что и

File.new(path_to_file, 'rb')

Спасибо

1 Ответ

1 голос
/ 17 августа 2011

ОК, я могу ошибаться в этом ... но я хотел выкопать это. К сожалению, вам просто нужно сохранить его как файл. Причина в том, что API создает HTTP POST. К сожалению, это должен быть файл.

Рекомендации от: [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

Так почему же тогда проблема заключается в сохранении в файл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...