2008-10-17 11 views
1

J'utilise actuellement Net::HTTP dans un script Ruby pour publier des fichiers sur un site Web via une publication en plusieurs parties. Cela fonctionne très bien pour les petits fichiers, mais je dois fréquemment envoyer des fichiers très volumineux en utilisant ce script, et HTTP#post semble seulement accepter les données post comme un objet String, ce qui signifie que le fichier que j'envoie doit être lu avant tout Peut être envoyé. Ce script s'exécute sur un serveur de production occupé, il est donc inacceptable d'engloutir des centaines de mégaoctets de RAM juste pour envoyer un fichier.Posts de formulaire en plusieurs parties tamponnées en Ruby

Idéalement, il y aurait une méthode qui pourrait recevoir une taille de tampon et un objet IO, et enverrait des blocs de données de la taille d'un tampon, en lisant depuis l'objet IO seulement comme requis. Quel serait le meilleur moyen d'y arriver? Ai-je manqué quelque chose de pertinent dans Net::HTTP?

Mise à jour: Net::HTTP#body_stream(input) semble bon, même si la documentation est plutôt ... clairsemée. Quelqu'un en mesure de me montrer un bon exemple de cela en action?

Répondre

3

En fait, je 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

+0

J'ai finalement creusé à travers le code source Net/HTTP pour comprendre comment utiliser body_stream, ce qui était une bonne douleur. Les modifications que j'ai apportées au code multi-parties que j'ai posté en réponse à cette autre question finissaient par ressembler beaucoup aux vôtres. Dommage que ce ne soit pas construit. –