RestClient многочастная загрузка из IO - PullRequest
2 голосов
/ 02 ноября 2011

Я пытаюсь загрузить данные как составные, используя RestClient примерно так:

response = RestClient.post(url, io, {
        :cookies => {
          'JSESSIONID' => @sessionid
        }, 
        :multipart => true, 
        :content_type => 'multipart/form-data'
      })

Аргумент io - это StringIO, который содержит мой файл, поэтому он из памяти, а не из памятис диска.

Сервер (сервлет Tomcat) не может прочитать многокомпонентные данные, выдав ошибку:

org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

Итак, я считаю, что RestClient не отправляет их в многочастном формате?Кто-нибудь видит проблему?Я предполагаю, что проблема на стороне Ruby (клиента), но я могу опубликовать свой код сервлета (Spring), если кто-то думает, что это может быть проблема на стороне сервера.

Мне также интересно, что RestClient будет использовать длязагруженное имя файла, поскольку нет фактического файла ... У вас может быть составной запрос без имени файла?

Ответы [ 2 ]

7 голосов
/ 23 февраля 2012

Вы можете сделать это, просто для этого нужно создать подкласс StringIO и добавить к нему метод, отличный от нуля:

class MailIO < StringIO
  def path
    'message'
  end
end

Я только что проверил это, и API Mailgun довольно плохо работает сэто.

1 голос
/ 08 ноября 2011

После консультации с автором библиотеки rest-client (Archiloque) кажется, что, если это возможно, API не настроен так, чтобы с ним легко справиться. Использование параметра: multipart => true приведет к тому, что IO будет обрабатываться как файл, и он ищет в IO не-nil #path, который для StringIO всегда равен nil.

Если кому-то понадобится это в будущем, вам нужно проконсультироваться со списком рассылки библиотеки (code@archiloque.net), поскольку автор, похоже, считает, что это возможно, но, возможно, не так просто.

Он МОЖЕТ легко выполнять потоковую загрузку из IO, если это не многочастный формат, за что я и остановился.

...