Yas*_*mar 24 django-models amazon-s3 boto3
我试图使用Boto3将文件上传到s3并将上传的文件公开并将其作为网址返回.
class UtilResource(BaseZMPResource):
class Meta(BaseZMPResource.Meta):
queryset = Configuration.objects.none()
resource_name = 'util_resource'
allowed_methods = ['get']
def post_list(self, request, **kwargs):
fileToUpload = request.FILES
# write code to upload to amazone s3
# see: https://boto3.readthedocs.org/en/latest/reference/services/s3.html
self.session = Session(aws_access_key_id=settings.AWS_KEY_ID,
aws_secret_access_key=settings.AWS_ACCESS_KEY,
region_name=settings.AWS_REGION)
client = self.session.client('s3')
client.upload_file('zango-static','fileToUpload')
url = "some/test/url"
return self.create_response(request, {
'url': url // return's public url of uploaded file
})
Run Code Online (Sandbox Code Playgroud)
我搜索了整个文档,我找不到任何链接,描述如何做到这一点,有人可以解释或提供任何资源,我可以找到灵魂?
小智 34
我处于同样的境地.由于我有公共可读的S3对象,因此无法在generate_presigned_url之外的Boto3文档中找到任何我不需要的内容.
我想出的最好的是:
bucket_location = boto3.client('s3').get_bucket_location(Bucket=s3_bucket_name)
object_url = "https://s3-{0}.amazonaws.com/{1}/{2}".format(
bucket_location['LocationConstraint'],
s3_bucket_name,
key_name)
Run Code Online (Sandbox Code Playgroud)
您可以尝试在boto3 github问题列表上发布以获得更好的解决方案.
小智 16
我遇到过同样的问题.假设您知道要存储数据的存储桶名称,则可以使用以下命令:
import boto3
from boto3.s3.transfer import S3Transfer
credentials = {
'aws_access_key_id': aws_access_key_id,
'aws_secret_access_key': aws_secret_access_key
}
client = boto3.client('s3', 'us-west-2', **credentials)
transfer = S3Transfer(client)
transfer.upload_file('/tmp/myfile', bucket, key,
extra_args={'ACL': 'public-read'})
file_url = '%s/%s/%s' % (client.meta.endpoint_url, bucket, key)
Run Code Online (Sandbox Code Playgroud)
won*_*ton 12
我发现最好的解决方案仍然是使用generate_presigned_url,只是Client.Config.signature_version需要设置为botocore.UNSIGNED。
以下代码返回不带签名内容的公共链接。
config = Config(signature_version=botocore.UNSIGNED)
config.signature_version = botocore.UNSIGNED
boto3.client('s3', config=config).generate_presigned_url('get_object', ExpiresIn=0, Params={'Bucket': bucket, 'Key': key})
Run Code Online (Sandbox Code Playgroud)
关于boto3存储库的相关讨论是:
| 归档时间: |
|
| 查看次数: |
17186 次 |
| 最近记录: |