首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用boto3,如何将可公开读取的对象放入S3 (或DigitalOcean空间)

使用boto3,如何将可公开读取的对象放入S3 (或DigitalOcean空间)
EN

Stack Overflow用户
提问于 2017-12-06 03:24:23
回答 1查看 1.6K关注 0票数 2

有没有人可以提供一个完整的例子:使用boto3和Python2.7将文件从台式计算机上传到DigitalOcean Spaces,这样上传的文件就可以从共享空间公开读取。

DigitalOcean表示,他们的Spaces应用程序接口与S3应用程序接口相同。我不知道这是否是100%正确的,但这是他们的接口:https://developers.digitalocean.com/documentation/spaces

我可以使用下面的代码进行文件上传,但我找不到一个如何指定文件公开可读的示例。我不想让整个Space (= S3存储桶)成为可读的--只读对象。

代码语言:javascript
复制
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 )

将最后一条语句更改为以下语句不起作用:

代码语言:javascript
复制
boto_client.upload_file( FILE_PATHNAME, BUCKETNAME, OBJECT_KEYNAME, 
                         ExtraArgs={ 'x-amz-acl': 'public-read', } )

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-14 15:45:15

感谢@Vorsprung上面的评论。以下是工作原理:

代码语言:javascript
复制
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 )
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47661177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档