2010-08-03 17 views
5

Mam połączenie, które działa tak, jak mogę wyświetlić listę segmentów, ale mając problemy podczas próby dodania obiektu.python s3 przy użyciu boto, mówi "błąd atrybutu: obiekt 'str' nie ma atrybutu 'połączenie'

conn = S3Connection(awskey, awssecret) 

key = Key(mybucket) 

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

pojawia się błąd:

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

Błąd znajduje się w pliku:

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

Odpowiedz

5

Key oczekuje obiektu wiadro jako pierwszy parametr (ewentualnie utworzony przez conn.create_bucket()).

Wygląda na to, że mybucket nie jest wiadrem, ale ciągiem znaków, więc połączenie nie powiedzie się.

+0

dzięki, to było to. btw k.set_acl ("public-read") nie działa, czy czegoś brakuje? – Blankman

+0

@blank: Nie mam pojęcia o 'set_acl' – sth

13

Wystarczy wymienić:

key = Key(mybucket) 

z:

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

Rozszerzając komentarzu STH jest, nie można przekazać ciąg, musi być przedmiotem wiadro.

6

Oto jak to zrobić to:

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

import boto3

s3 = boto3.resource ('S3')

mybucket = s3.Bucket (” mybucketName ')

Teraz otrzymasz obiekt wiadra s3. Dostałeś ciąg.

Ciesz się!

Powiązane problemy