2010-08-03 9 views
5

Tengo una conexión que funciona como puedo enumerar cubos, pero que tiene problemas al tratar de agregar un objeto.python s3 usando boto, dice 'atributo error:' str 'objeto no tiene atributo' conexión '

conn = S3Connection(awskey, awssecret) 

key = Key(mybucket) 

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

me sale el error:

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

el error está en el archivo:

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

Respuesta

5

Key espera un objeto de cubo como primer parámetro (posiblemente creado por conn.create_bucket()).

Parece que mybucket no es un contenedor, sino una cadena, por lo que la llamada falla.

+0

gracias, eso fue todo. btw k.set_acl ('public-read') no funciona, ¿me falta algo? – Blankman

+0

@blank: No tengo idea de 'set_acl' – sth

13

basta con sustituir:

key = Key(mybucket) 

con:

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

Ampliando el comentario de algo, no se puede pasar una cadena, que tiene que ser un objeto de cubo.

6

Así es como me gustaría hacer esto:

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

boto3 importación

s3 = boto3.resource ('S3')

MyBucket = s3.Bucket (' mybucketName ')

Ahora obtendrá el objeto s3 bucket. Estabas recibiendo la cuerda.

¡Disfrútalo!

Cuestiones relacionadas