2009-08-12 8 views
6

Я использую restclient для многостраничной формы для отправки данных в спокойную веб-службу (это услуга кодирования видео Panda). Фокус в том, что файл, который я передаю в restclient (ветка Technoweenie), исходит из моей собственной формы, которую пользователь представляет.Использование restclient с многостраничными сообщениями

Итак, давайте пройдем через это. Пользователь отправляет файл в мое приложение rails. В моем контроллере он получает файл из params [: file]. Затем я хочу передать params [: file] в Panda с помощью RestClient.

Ошибка, которую я получаю, находится на сервере Panda. Я заметил, что параметр файла в трассировке стека также находится в строке (что я предполагаю, что Panda превращается в строку для более удобной stacktrace).

~ Started request handling: Wed Aug 12 18:05:15 +0000 2009 
~ Params: {"format"=>"html", "multipart"=>"true", "account_key"=>"SECURE_KEY", "action"=>"upload", "id"=>"SECURE_ID", "controller"=>"videos", "file"=>"#<File:0xcf02ca4>"} 
~ 9bfb1750-6998-012c-4509-12313900b0f6: (500 returned to client) InternalServerErrorcan't convert nil into String 
/var/local/www/panda/app/models/video.rb:246:in `extname' 
/var/local/www/panda/app/models/video.rb:246:in `initial_processing' 
/var/local/www/panda/app/controllers/videos.rb:79:in `upload' 
+0

Можете ли вы сказать, как вы выяснили эту проблему? –

ответ

1

Я сомневаюсь, что вы действительно можете передать параметр загрузки в стиле CGI из Rails в restclient и ожидать его работы.

Обычная загрузка в Rails будет иметь дополнительные атрибуты, которые не относятся к размещенному ресурсу (например, исходное имя файла и т. Д.), А загрузка Rails содержит IO с фактическими данными файла. Также объект загрузки файлов в Rails может быть дескриптором Tempfile и может быть StringIO - в зависимости от размера загрузки.

Что вам нужно сделать, это «переупаковать» вашу загрузку для клиента-клиента, чтобы обработать ее должным образом и передать повторно упакованный и перемотанный объект Tempfile в restclient. Возможно, вам удастся просто выбрать сам объект загрузки, а не все параметры [: file]

0

Похоже, проблема связана с публикацией файла клиента остальным клиентом, ознакомьтесь с альтернативным методом для публикации, например, бордюра.

Много примеров для размещения многокомпонентных данные форм по этому вопросу: Ruby: How to post a file via HTTP as multipart/form-data?

1

подтвердить, что restclient действия может сохранить локально первым. Если действие не может быть сохранено локально, тогда у вас будет лучшая идея, где смотреть во время съемки проблем.