Python s3 с использованием boto говорит: «ошибка атрибута: у объекта str нет атрибута« соединение » - PullRequest
5 голосов
/ 03 августа 2010

У меня есть соединение, которое работает, как я могу перечислить сегменты, но возникают проблемы при попытке добавить объект.

conn = S3Connection(awskey, awssecret)

key = Key(mybucket)

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

Я получаю ошибку:

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

ошибка в файле:

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

Ответы [ 5 ]

13 голосов
/ 24 апреля 2012

Просто замените:

key = Key(mybucket)

на:

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

Расширяя комментарий sth, вы не можете передать строку, она должна быть объектом корзины.

6 голосов
/ 24 апреля 2012

Вот как бы я это сделал:

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')

Митч

6 голосов
/ 03 августа 2010

Key ожидает объект-контейнер в качестве первого параметра (возможно, созданного с помощью conn.create_bucket()).

Похоже, mybucket - это не контейнер, а строка, поэтому вызов не выполняется.

0 голосов
/ 22 апреля 2019
import os
import boto.s3.connection

accessKeyId = 'YOUR_AWS_ACCESS_KEY_ID'
secretKey = 'YOUR_AWS_SECERT_KEY_ID'
host = 'HOST'

S3 = boto.connect_s3(
  aws_access_key_id = accessKeyId,
  aws_secret_access_key = secretKey,
  host = host,
  port = PORT,
  calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)


def upload_objects():

    try:
        bucket_name = "bucket name" #s3 bucket name
        root_path = 'model/' # local folder for upload
        my_bucket = S3.get_bucket(bucket_name)
        for path, subdirs, files in os.walk(root_path):
            path = path.replace("\\","/")
            directory_name = path.replace(root_path,"")
            for file in files:
                if(file != ".DS_Store"):
                    full_key_name = os.path.join(path, file)
                    k = my_bucket.new_key(full_key_name)
                    k.set_contents_from_filename('/model/'+directory_name+'/'+file)

    except Exception as err:
        print(err)

upload_objects()
0 голосов
/ 30 мая 2017
import boto3
s3 = boto3.resource('s3')
mybucket = s3.Bucket('mybucketName')

Теперь вы получите объект корзины s3. Вы получили строку.

Наслаждайтесь!

...