Buffered Multipart Form Posts in Ruby
-
03-07-2019 - |
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?
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