2010-05-23 9 views
2

Je dois inclure la longueur de contenu d'un fichier image/png publié dans un téléchargement vers un service Web.Comment calculer la longueur de contenu d'un téléchargement de fichier dans ruby?

Mais comment calculer la longueur de contenu à inclure dans l'en-tête?

Merci. Je le soumets en utilisant rest-client.

Webservice pour le téléchargement est Postful: et la documentation a été claire: http://www.postful.com/developer/guide#uploading_attachments

Parce que je suis en train d'écrire la charge utile et en-têtes, semble comme je l'ai besoin d'entrer cette valeur.

Je cherche aussi à postalmethods qui dit que la longueur du contenu est l'entrée utilisateur:

http://postalmethods.com/method/2009-02-26/UploadFile

Les fichiers eux-mêmes sont .PNG. Je vais les attacher à un modèle en utilisant Paperclip, donc je vais avoir un chemin de fichier à partir de ça.

Le fichier que j'ai besoin la longueur du contenu à afficher est stocké sous forme d'une pièce jointe en utilisant paperclip, de sorte que le code spécifique générant des problèmes est:

File.size(@postalcard.postalimage.url) 

Répondre

1

Eh bien, vous savez comment vous lisez et l'affichage de la données, sans doute - afin que vous sachiez combien de données que vous envoyez. C'est la longueur du contenu. Si vous l'envoyez directement en binaire comme le corps du message, c'est juste la longueur du fichier. Si vous l'encodez en base 64, alors la longueur du contenu sera le ((longueur du fichier + 2)/3) * 4. Si cela se passe dans une enveloppe SOAP, etc., vous devrez en tenir compte. Une manière de le faire pour les situations compliquées est de construire tout le corps du message en mémoire d'abord, de définir la longueur du contenu, puis de simplement copier de la mémoire directement dans le corps du message.

+0

Comment puis-je obtenir cette taille ... dois-je simplement utiliser File.size? Que voulez-vous dire si ça va à une enveloppe SOAP - je suppose que c'est ce que j'essaie de comprendre la documentation (j'ai ajouté à ma question) pour le webservice n'était pas clair .... – Angela

+0

@Angela: On dirait que vous n'avez pas d'enveloppe ou quoi que ce soit de similaire - juste le contenu. Donc, il suffit de mettre la longueur de la taille. File.size sonne comme la bonne façon de procéder; Je ne suis pas une personne Ruby, donc je ne sais pas avec certitude. –

+0

OK, espérant que c'est la bonne façon, déroutant. – Angela

1

Eh bien, vous pouvez utiliser File.size(filepath) mais il est peu probable que vous ayez besoin de - la plupart des bibliothèques pour que les requêtes HTTP le fassent automatiquement - quelle bibliothèque utilisez-vous? (Ou, quel type de service web est-il?)

+0

Hmm ... peut-être que c'est fait automatiquement, j'utilise rest-client. Le webservice est Postful: et la documentation n'a pas été claire. http://www.postful.com/developer/guide Je regarde aussi les méthodes postales qui dit que la longueur de contenu est l'entrée de l'utilisateur: http://www.postalmethods.com/method/2009- 02-26/UploadFile – Angela

+0

Cette documentation de méthode ne semble pas mentionner Content-length autant que je peux voir, juste les données de fichier elle-même au format base64. Où pensez-vous qu'il est nécessaire de fournir la longueur? – Gareth

+0

Il est dit dans l'en-tête que je dois fournir la longueur du contenu :( – Angela