Python 3 Boto 3,AWS S3:获取对象URL


问题内容

上传文件后,我需要直接检索公共对象URL,以便能够将其存储在数据库中。这是我的上传代码:

   s3 = boto3.resource('s3')
   s3bucket.upload_file(filepath, objectname, ExtraArgs={'StorageClass': 'STANDARD_IA'})

我不是在寻找预先签名的URL,而只是希望始终可以通过https公开访问的URL。

任何帮助表示赞赏。


问题答案:

没有简单的方法,但是您可以从存储桶所在的区域(get_bucket_location),存储桶名称和存储键构造URL :

bucket_name = "my-aws-bucket"
key = "upload-file"

s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
bucket.upload_file("upload.txt", key)
location = boto3.client('s3').get_bucket_location(Bucket=bucket_name)['LocationConstraint']
url = "https://s3-%s.amazonaws.com/%s/%s" % (location, bucket_name, key)