Télécharger l'image redimensionnée à S3
Je suis en train de télécharger l'image redimensionnée à S3:
fp = urllib.urlopen('http:/example.com/test.png')
img = cStringIO.StringIO(fp.read())
im = Image.open(img)
im2 = im.resize((500, 100), Image.NEAREST)
AK = 'xx' # Access Key ID
SK = 'xx' # Secret Access Key
conn = S3Connection(AK,SK)
b = conn.get_bucket('example')
k = Key(b)
k.key = 'example.png'
k.set_contents_from_filename(im2)
mais j'obtiens une erreur:
in set_contents_from_filename
fp = open(filename, 'rb')
TypeError: coercing to Unicode: need string or buffer, instance found
Regardez le type de
im2
OriginalL'auteur Rafał Kot | 2011-07-13
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de convertir votre image en un ensemble d'octets avant que vous pouvez télécharger sur s3. Vous pouvez soit écrire l'image dans un fichier puis de télécharger le fichier, ou vous pouvez utiliser un cStringIO objet d'éviter d'écrire sur le disque que j'ai fait ici:
Pour définir le type mime ajouter un headers={"Content-Type": "image/png"} tant que paramètre à la set_contents_from_string appel. Boto essayer de deviner le type mime par défaut, mais cela vous permettra de le configurer manuellement.
Grande réponse. Un changement que je recommande est d'utiliser le génial demandes de module plutôt que l'ancienne
urllib
module.Je suis d'accord, la demande est bien mieux que de urllib. J'ai seulement utilisé ici parce qu'il a été utilisé par le posteur d'origine.
Merci @secretmike! C'est le seul post en ligne, ce qui explique cela clairement
OriginalL'auteur secretmike
Ma conjecture est que
Key.set_contents_from_filename
s'attend à un seul argument de type string, mais vous êtes de passage dansim2
, qui est un autre type d'objet retourné parImage.resize
. Je pense que vous devez écrire votre image redimensionnée pour le système de fichiers en tant que nom de fichier, puis à transmettre que le nom du fichier àk.set_contents_from_filename
. Sinon trouver une autre méthode dans laKey
classe qui peut obtenir le contenu de l'image à partir d'une mémoire de construire (StringIO ou certains instance de l'objet).OriginalL'auteur Peter Lyons
OriginalL'auteur tingyiy