Question

J'utilise actuellement Net :: HTTP dans un script Ruby pour publier des fichiers sur un site Web via un message de formulaire en plusieurs parties. Cela fonctionne très bien pour les petits fichiers, mais je dois souvent envoyer de très gros fichiers à l’aide de ce script. HTTP # post ne semble accepter que les données de publication en tant qu’objet String , qui signifie que le fichier que j'envoie doit être lu dans la mémoire avant que quoi que ce soit puisse être envoyé. Ce script s’exécute sur un serveur de production très occupé. Il est donc inacceptable d’encombrer des centaines de mégaoctets de RAM pour envoyer un fichier.

Idéalement, une méthode pourrait se voir attribuer une taille de tampon et un objet IO , et envoyer des blocs de données de la taille d'un tampon, lus dans le IO objet uniquement si nécessaire. Quel serait le meilleur moyen d'y arriver? Ai-je oublié quelque chose de pertinent dans Net :: HTTP ?

Mise à jour : Net :: HTTP # body_stream (entrée) est correct, bien que la documentation soit plutôt ... clairsemée. Quelqu'un peut-il me montrer un bon exemple de cela en action?

Était-ce utile?

La solution

Utilisez Net :: HTTP # body_stream (entrée)

Exemple de publication multipart sans diffusion en continu :

Autres conseils

En fait, j'ai réussi à télécharger un fichier en utilisant body_stream. Le code source complet est ici: http://stanislavvitvitskiy.blogspot.com/2008/12/ multipart-post-in-ruby.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top