Вопрос

В настоящее время я использую 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

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