2011-04-04 3 views
1

Dans une application django, je reçois une variable POST avec le nom d'un fichier téléchargé dans amazon s3.Comment convertir un nom de clé Unicode afin amazon-s3 va le reconnaître?

Mais je reçois la clé en unicode, et quand je passe la clé à boto et à amazon s3, rien n'est retourné. Cependant si je liste le seau avec boto, et obtiens la clé de la liste, alors amazon s3 renvoie l'objet attendu. Donc, ma question est, comment puis-je convertir mon keyname unicode dans le même encodage de la clé que boto a pour que amazon me donne l'objet.

Comment puis-je savoir quel est le codage de la touche boto?

Merci beaucoup pour tout commentaire, celui-ci me rend fou. Tout a bien fonctionné avant d'ajouter la barre oblique et je ne vois pas pourquoi cela ferait une différence.

Voici le code du terminal:

>>> unicode_key_name 
u'missionuploads/tom-mission-4d8f9da9122ac21c17000002-4_4_11_9_38_PM.jpg' 
>>> boto_key_name 
'missionuploads/tom-mission-4d8f9da9122ac21c17000002-4_4_11_9_37_PM.jpg' 
>>> len(unicode_key_name) 
70 
>>> len(boto_key_name) 
70 
>>> unicode_key = bucket.get_key(unicode_key_name.encode('utf-8')) 
>>> unicode_key 
>>> unicode_key = bucket.get_key(unicode_key_name.encode('ascii')) 
>>> unicode_key 
>>> boto_key = bucket.get_key(boto_key_name) 
>>> boto_key 
<Key: user.media.eu,missionuploads/tom-mission-4d8f9da9122ac21c17000002-4_4_11_9_37_PM.jpg> 

-------- ---------- EDIT

Passer la chaîne unicode fonctionne très bien, il est pas besoin de le convertir, assurez-vous simplement que vous cherchez le bon nom de clé! Comme je viens de recevoir le nom de la clé côté serveur, j'ai supposé que c'était correct, mais l'erreur semble être du côté de l'application avec un nom, puis l'envoi d'un nom nouvellement créé (une minute différente) au serveur .

Répondre

5

'37' et '38' sont des chaînes différentes. Cela fonctionnera probablement bien lorsque vous utilisez la valeur correcte.

+0

Merci pour la paire d'yeux supplémentaire Ignacio, j'ai même différé tous les caractères spéciaux et ai sauté sur l'évidence, puisque je n'ai jamais considéré que j'obtiendrais le mauvais nom de fichier. À votre santé –