2010-07-22 4 views
2

J'utilise un service Web basé sur SOAP qui attend un élément d'image sous la forme d'un 'ByteArray' décrit dans ses documents comme étant de type 'byte []' - le client que j'utilise est la bibliothèque de mousse basée sur Python.Python Create Byte Array pour le service Web Octet attendu []

Le problème est que je ne sais pas exactement comment représenter le ByteArray pour ce service - je suppose qu'il devrait ressembler à la liste suivante:

[71,73,70,56,57,97,1,0,1,0,128,0,0,255,255,255,0,0,0,33,249,4,0,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59] 

Maintenant, quand je vous envoie ce dans le cadre du demande, le service se plaint du message: Longueur de séquence Base64 (105) non valide. Doit être un multiple de 4. Est-ce que cela signifie que je devrais remplir chaque membre avec des zéros pour les faire 4 longs, c'est-à-dire [0071,0073,0070, ...]?

Répondre

2

Je l'ai pensé à la fin - ce que le service Web destiné par un ByteArray (octet []) avait l'air quelque chose comme:

/9j/4AAQSkZJRgABAgEAYABgAAD/7gAOQWRvYmUAZAAAAAAB... 

... aha, base 64 (nulle part dans leurs documents, Je me hâte d'ajouter) ...

donc je réussi à le faire fonctionner en utilisant ceci:

encoded_data = base64.b64encode(open(file_name, 'rb').read()) 
strg = '' 
for i in xrange((len(encoded_data)/40)+1): 
    strg += encoded_data[i*40:(i+1)*40] 
# strg then contains data required 

J'ai trouvé l'inspiration right here - grâce à Doug Hellman

+1

Merci de poster votre solution, c'est exactement ce que je cherchais – igniteflow