Pregunta

Actualmente estoy usando Net :: HTTP en una secuencia de comandos Ruby para publicar archivos en un sitio web a través de una publicación de formulario multiparte. Funciona muy bien para archivos pequeños, pero con frecuencia tengo que enviar archivos muy grandes con este script, y parece que HTTP # post solo acepta datos de publicación como un objeto String , que significa que el archivo que estoy enviando debe ser leído en la memoria antes de poder enviar algo. Esta secuencia de comandos se ejecuta en un servidor de producción ocupado, por lo que no es aceptable engullir cientos de megabytes de RAM solo para enviar un archivo.

Lo ideal sería que hubiera un método que pudiera tener un tamaño de búfer y un objeto IO , y que enviara trozos de datos del tamaño de un búfer, leyendo el IO objeto solo según sea necesario. ¿Cuál sería la mejor manera de hacer que esto suceda? ¿Perdí algo relevante en Net :: HTTP ?

Actualizar : Net :: HTTP # body_stream (input) se ve bien, aunque la documentación es bastante ... escasa. ¿Alguien capaz de señalarme un buen ejemplo de esto en acción?

¿Fue útil?

Solución

Use Net :: HTTP # body_stream (entrada)

Ejemplo para publicación multiparte sin transmisión :

Otros consejos

En realidad, logré subir un archivo usando body_stream. El código fuente completo está aquí: http://stanislavvitvitskiy.blogspot.com/2008/12/ multipart-post-in-ruby.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top