2010-06-08 9 views
0

J'ai un fichier binaire qui doit être envoyé en tant que chaîne à un service web tiers. Il s'avère que cela nécessite un encodage base64.Comment puis-je base encoder un fichier binaire (JPG) dans ruby ​​

En ruby ​​j'utiliser les éléments suivants: corps

 body = body << Base64.b64encode(IO.read("#{@postalcard.postalimage.path}")) 

est une forte qui conists d'un bouquet de chaînes en tant que paramètres.

Cela vous semble-t-il correct? (le fichier est chargé dans le modèle carte postale en utilisant un trombone)

Merci.

Répondre

2

Base64.b64encode affiche par défaut la version codée en base 64 de la longueur de 60 caractères. Par exemple, si je vais faire

Base64.b64encode('StackOverflow') 
#=> prints U3RhY2tPdmVyZmxvdw== 
#=> returns "U3RhY2tPdmVyZmxvdw==\n" 

Si je lui donne une longueur, permet de dire 4

Base64.b64encode('StackOverflow', 4) 
#=> prints U3Rh 
#=> prints Y2tP 
#=> prints dmVy 
#=> prints Zmxv 
#=> prints dw== 
#=> returns "U3RhY2tPdmVyZmxvdw==\n" 

Mais si vous ne voulez pas imprimer la chaîne codée à stdout et seulement retourner sa valeur, ce que je pense que ce dont vous avez besoin, puis utiliser

Base64::encode64('StackOverflow') 
#=> "U3RhY2tPdmVyZmxvdw==\n" 
+0

oh je vois, donc en d'autres termes, .b64encode le tronque à 60? – Angela

+0

Non, il ne tronque pas la chaîne transmise. En plus de renvoyer la chaîne encodée, elle affiche aussi par défaut la version encodée en lignes de 60 caractères sinon elle affichera les caractères égaux au second argument comme je l'ai donné dans mon exemple ci-dessus 'Base64.b64encode ('StackOverflow' , 4) ' – nas

+0

ok donc pour mes fins, je devrais utiliser base64.encode64? Je veux passer la chaîne codée en tant que partie d'une chaîne dans un service Web .... – Angela