(Многокомпонентная) загрузка zip-архива на веб-машину Ruby обрабатывается стойкой

Я делаю форму загрузки для zip-архивов в приложении ruby ​​webmachine. Моя идея состоит в том, чтобы загрузить через свой бэкэнд, где я могу добавить некоторые дополнительные параметры, а затем загрузить их в службу Amazon s3 с помощью RestClient.

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

Я пробовал несколько вещей, но не могу понять, как обрабатывать запрос, как только он попадает в мой сервер. Я создал ресурс и отлаживаю его прямо в методе process_post.

Моя переменная @request представляет собой Webmachine::Request с Webmachine::Adapters::Rack::RequestBody и Rack::Request, но я не могу извлечь из нее файл, чтобы использовать его в качестве входных данных для моего запроса RestClient.

Я думаю; @request.body.to_s и @request.body.to_io каким-то образом представляют загруженный файл, и я попытался использовать их в качестве входных данных для Rack::Multipart методов, но это не дало мне файла.

Я также пробовал работать с гемом rack-raw-upload, но я не могу получить в mime-типе что-то еще, кроме «application / x-www-form-urlencoded» или multipart. Я явно устанавливаю его на; application/octet-stream

Такие вещи, как File.new(filename, 'rb'), дали мне `rrno :: ENOENT: Нет такого файла или каталога @ rb_sysopen '. В качестве имени файла я просто использовал example.zip.

Думаю, мне не хватает чего-то, что связано с методом вызова Rack :: Request (env).

Есть ли у кого-нибудь идеи, как обрабатывать загрузки в стойку? Или дать мне какие-нибудь подсказки для нового направления? Спасибо.


person LiveNL    schedule 13.05.2016    source источник
comment
Возможно, стоит опубликовать свой код стойки.   -  person tadman    schedule 13.05.2016
comment
@tadman Ну, у меня нет настоящего кода стойки. Я просто знаю, что Rack обрабатывает загрузку файлов. И код Rack, который я пробовал, приведен выше; методы Rack::Multipart, например parse_multipart. Стоит ли внедрять другой код стойки?   -  person LiveNL    schedule 13.05.2016


Ответы (1)


Я создал суть, которая показывает, как получить составной поток. Вам потребуется дальнейший синтаксический анализ, чтобы получить загруженный файл.

https://gist.github.com/jewilmeer/eb40abd665b70f53e6eb60801de24342

person jewilmeer    schedule 13.05.2016
comment
Спасибо. Часть File.write подтолкнула меня в правильном направлении. И я обнаружил, что request.body.to_s тоже может помочь вместо request.body.to_io.read. - person LiveNL; 14.05.2016