Буферизованные сообщения из нескольких частей в Ruby - PullRequest
1 голос
/ 17 октября 2008

В настоящее время я использую Net::HTTP в сценарии Ruby для публикации файлов на веб-сайте с помощью составной публикации. Он отлично работает для небольших файлов, но мне часто приходится отправлять очень большие файлы с помощью этого сценария, и HTTP#post, кажется, принимает данные только как объект String, что означает, что файл, который я отправляю, должен быть прочитан в память, прежде чем что-либо может быть отправлено. Этот сценарий выполняется на занятом производственном сервере, поэтому недопустимо тратить сотни мегабайт оперативной памяти только для отправки файла.

В идеале, должен существовать метод, которому можно присвоить размер буфера и объект IO, и который будет отправлять куски данных размером с буфер, считывая из объекта IO только по мере необходимости. Что было бы лучшим способом сделать это? Я что-то упустил в Net::HTTP?

Обновление : Net::HTTP#body_stream(input) выглядит хорошо, хотя документация довольно ... скудная. Кто-нибудь может указать мне хороший пример этого в действии?

Ответы [ 2 ]

3 голосов
/ 25 декабря 2008

На самом деле мне удалось загрузить файл, используя body_stream. Полный исходный код здесь: http://stanislavvitvitskiy.blogspot.com/2008/12/multipart-post-in-ruby.html

0 голосов
/ 19 октября 2008

Использовать Net :: HTTP # body_stream (вход)

Пример для многочастной публикации без потоковой передачи :

...