2010-08-03 20 views
5

J'ai une connexion qui fonctionne comme je peux lister des compartiments, mais qui rencontre des problèmes en essayant d'ajouter un objet.python s3 en utilisant boto, dit 'erreur d'attribut: l'objet' str 'n'a pas d'attribut' connexion '

conn = S3Connection(awskey, awssecret) 

key = Key(mybucket) 

key.key = p.sku 
key.set_contents_from_filename(fullpathtofile) 

Je reçois l'erreur:

'attribute error: 'str' object has no attribute 'connection' 

l'erreur est dans le fichier:

/usr/local/lib/python2.6/dist-package/boto-2.obl-py2.6.egg/boto/s3/key.py' line # 539 

Répondre

5

Key attend un objet seau comme premier paramètre (éventuellement créé par conn.create_bucket()).

Il semble que mybucket ne soit pas un compartiment, mais une chaîne, l'appel échoue donc.

+0

merci, c'était ça. btw k.set_acl ('public-read') ne fonctionne pas, ai-je oublié quelque chose? – Blankman

+0

@blank: Aucune idée sur 'set_acl' – sth

13

Il suffit de remplacer:

key = Key(mybucket) 

avec:

mybucket = "foo" 
bucketobj = conn.get_bucket(mybucket) 
mykey = Key(bucketobj) 

expansion sur le commentaire de STH, vous ne pouvez pas passer une chaîne, il doit être un objet seau.

6

Voici comment je ferais ceci:

import boto 
s3 = boto.connect_s3() 
bucket = s3.get_bucket("mybucketname") 
key = bucket.new_key("mynewkeyname") 
key.set_contents_from_filename('path_to_local_file', policy='public-read') 

Mitch

0

importation boto3

s3 = boto3.resource ('s3')

MyBucket = s3.Bucket (» mybucketName ')

Maintenant, vous obtiendrez l'objet s3 seau. Vous obteniez la chaîne.

Profitez-en!