Буферизованные сообщения из нескольких частей в Ruby
-
03-07-2019 - |
Вопрос
В настоящее время я использую Net :: HTTP
в сценарии Ruby для публикации файлов на веб-сайте с помощью составной публикации. Он отлично работает для небольших файлов, но мне часто приходится отправлять очень большие файлы с помощью этого сценария, и HTTP # post
, похоже, принимает данные публикации только как объект String
, что означает, что файл, который я посылаю, должен быть прочитан в память, прежде чем что-либо может быть отправлено. Этот сценарий выполняется на занятом производственном сервере, поэтому недопустимо тратить сотни мегабайт оперативной памяти только для отправки файла.
В идеале, должен быть метод, которому можно присвоить размер буфера и объект IO
, который будет отправлять фрагменты данных размером с буфер, считывая из IO код> объект только по мере необходимости. Что было бы лучшим способом сделать это? Я что-то упустил в
Net :: HTTP
?
Обновление : Net :: HTTP # body_stream (input)
выглядит хорошо, хотя документация довольно ... скудная. Кто-нибудь может указать мне хороший пример этого в действии?
Решение
Использовать Net :: HTTP # body_stream (input)
Пример многочастной публикации без потоковой передачи : р>
Другие советы
На самом деле мне удалось загрузить файл, используя body_stream. Полный исходный код здесь: http://stanislavvitvitskiy.blogspot.com/2008/12/ многочастный-пост-в-ruby.html р>