有人可以提供以下内容的完整示例:使用boto3和Python(2.7)将文件从台式计算机上传到DigitalOcean Spaces,以便上传的文件可以从Spaces公开读取。
DigitalOcean表示他们的Spaces API与S3 API相同。我不知道这是否100%正确,但这是他们的API:https://developers.digitalocean.com/documentation/spaces
我可以使用下面的代码进行文件上传,但是我找不到如何指定文件可公开读取的示例。我不想让整个Space(= S3 bucket)可读 - 只有对象。
import boto3
boto_session = boto3.session.Session()
boto_client = boto_session.client('s3',
region_name='nyc3',
endpoint_url='https://nyc3.digitaloceanspaces.com',
aws_access_key_id='MY_SECRET_ACCESS_KEY_ID',
aws_secret_access_key='MY_SECRET_ACCESS_KEY')
boto_client.upload_file( FILE_PATHNAME, BUCKETNAME, OBJECT_KEYNAME )
将最后一个语句更改为以下语句不起作用:
boto_client.upload_file( FILE_PATHNAME, BUCKETNAME, OBJECT_KEYNAME,
ExtraArgs={ 'x-amz-acl': 'public-read', } )
谢谢。
答案 0 :(得分:2)
感谢@Vorsprung的上述评论。以下作品:
import boto3
boto_session = boto3.session.Session()
boto_client = boto_session.client('s3',
region_name='nyc3',
endpoint_url='https://nyc3.digitaloceanspaces.com',
aws_access_key_id='MY_SECRET_ACCESS_KEY_ID',
aws_secret_access_key='MY_SECRET_ACCESS_KEY')
boto_client.upload_file( FILE_PATHNAME, BUCKETNAME, OBJECT_KEYNAME )
boto_client.put_object_acl( ACL='public-read', Bucket=BUCKETNAME, Key=OBJECT_KEYNAME )