Использование restclient с составными сообщениями

StackOverflow https://stackoverflow.com/questions/1267858

  •  13-09-2019
  •  | 
  •  

Вопрос

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

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

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

 ~ 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'
Это было полезно?

Решение

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

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

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

Другие советы

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

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

Множество примеров для публикации данных составной формы по этому вопросу: Рубин:Как опубликовать файл через HTTP в виде составных / form-data?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top