Domanda

Attualmente sto usando Net :: HTTP in uno script di Ruby per pubblicare file su un sito Web tramite un post di moduli multipart. Funziona benissimo per file di piccole dimensioni, ma spesso devo inviare file molto grandi usando questo script e HTTP # post sembra accettare i dati dei post solo come oggetto String , che significa che il file che sto inviando deve essere letto in memoria prima di poter inviare qualsiasi cosa. Questo script è in esecuzione su un server di produzione occupato, quindi è inaccettabile divorare centinaia di megabyte di RAM solo per inviare un file.

Idealmente, ci sarebbe un metodo a cui potrebbe essere data una dimensione del buffer e un oggetto IO e che invierebbe blocchi di dati di dimensioni buffer, leggendo da IO oggetto solo come richiesto. Quale sarebbe il modo migliore per farlo accadere? Mi sono perso qualcosa di rilevante in Net :: HTTP ?

Aggiorna : Net :: HTTP # body_stream (input) sembra buono, sebbene la documentazione sia piuttosto ... scarsa. Qualcuno in grado di indicarmi un buon esempio di questo in azione?

È stato utile?

Soluzione

Usa Net :: HTTP # body_stream (input)

Esempio per post multipart senza streaming :

Altri suggerimenti

In realtà sono riuscito a caricare un file usando body_stream. Il codice sorgente completo è qui: http://stanislavvitvitskiy.blogspot.com/2008/12/12/ multipart-post-in-ruby.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top