web-dev-qa-db-ja.com

python and botoを使用して、s3パブリックでファイルを作成します

以下にthinsリンクがあり、アクセスしようとすると、「アクセスが拒否されました」というxmlファイルが表示されます。

そして、aws管理コンソールに移動してこれを作成する必要がありますpart-0000 file publicなので、アクセスできます。

pythonでbotoを使用してアクセス許可を付与し、aws managmetコンソールに移動してファイルを公開しなくてもこのリンクにアクセスできるようにする方法を知っていますか?

downloadLink = 'https://s3.amazonaws.com/myFolder/uploadedfiles/2015423/part-00000'
19
UserX

これはあなたにアイデアを与えるはずです:

import boto.s3
conn = boto.s3.connect_to_region('us-east-1')  # or region of choice
bucket = conn.get_bucket('myFolder')
key = bucket.lookup('uploadedfiles/2015423/part-00000')
key.set_acl('public-read')

この場合、 public-readはS3でサポートされているACLポリシーの1つであり、誰でもファイルを読み取ることができます。

29
garnaat
from boto3.s3.transfer import S3Transfer
import boto3

# ...
# have all the variables populated which are required below

client = boto3.client('s3', aws_access_key_id=access_key,
                      aws_secret_access_key=secret_key)
transfer = S3Transfer(client)
transfer.upload_file(filepath, bucket_name, folder_name+"/"+filename)
response = client.put_object_acl(ACL='public-read', Bucket=bucket_name, Key="%s/%s" % (folder_name, filename))
10
Manish Mehra

これはboto2.42.0およびPython 3

s3 = boto.connect_s3()
b = s3.get_bucket('brianray')
k = Key(b)
k.key = new_file_name
k.set_contents_from_filename(new_file_name)
k.set_acl('public-read')
k.generate_url(expires_in=0, query_auth=False)
3
brianray

Boto3設定ACL。ここで良い質問/回答。

_bucket.Acl().put(ACL='public-read')
obj.Acl().put(ACL='public-read')
_

obj.Acl().put...の使用は、アイテムを移動または操作するときに非常に役立ちます。スクリプト/手続き型の場合に特に役立ちます。

https://boto3.readthedocs.io/en/latest/guide/migrations3.html#access-controls 経由。

0
Marc