首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用django-storages和boto3获取aws s3对象键

如何使用django-storages和boto3获取aws s3对象键
EN

Stack Overflow用户
提问于 2017-06-17 10:04:04
回答 2查看 2.7K关注 0票数 4

我使用亚马逊网络服务s3对媒体和静态文件使用django-storage和boto3。我需要获取aws s3存储桶的对象键,以便为该对象生成url。

代码语言:javascript
复制
client = boto3.client('s3')
bucket_name = 'django-bucket'

key = ???

u = client.generate_presigned_url('get_object', Params = {'Bucket': bucket_name, 'Key': key,'ResponseContentType':'image/jpeg', 'ResponseContentDisposition': 'attachment; filename="your-filename.jpeg"'}, ExpiresIn = 1000)

这些都在我的设置中:

代码语言:javascript
复制
STATICFILES_LOCATION = 'static'
MEDIAFILES_LOCATION = 'media'
STATICFILES_STORAGE = 'myproject.custom_storages.StaticStorage'
DEFAULT_FILE_STORAGE = 'myproject.custom_storages.MediaStorage'
AWS_ACCESS_KEY_ID = "my_access_key_id"
AWS_SECRET_ACCESS_KEY = "my_secret_access_key"
AWS_STORAGE_BUCKET_NAME = "django-bucket"
AWS_QUERYSTRING_AUTH = False
AWS_S3_CUSTOM_DOMAIN = AWS_STORAGE_BUCKET_NAME + ".s3.amazonaws.com"
# static media settings
STATIC_URL = "https://" + AWS_STORAGE_BUCKET_NAME + ".s3.amazonaws.com/"
MEDIA_URL = STATIC_URL + "media/"
ADMIN_MEDIA_PREFIX = STATIC_URL + "admin/"

我可以得到图像文件的文件路径

代码语言:javascript
复制
ui = UserImage.objects.get(user=user_id, image=image_id)
url = ui.image.url

'https://django-bucket.s3.amazonaws.com/media/user_image/1497598249_49.jpeg'

但我不知道如何获取s3对象键,以便为该对象生成url。

EN

回答 2

Stack Overflow用户

发布于 2019-11-26 18:16:03

似乎前缀可以由文件字段“storage”位置值和文件“name”(这是从“location”到文件的路径-它包括我们大多数人认为的文件“name”)来构建。

下面是一个函数的快速演示,它可以完成这项工作:

代码语言:javascript
复制
import os

def get_file_key(file_field):
    return os.path.join(file_field.storage.location, file_field.name)

使用方法如下:

代码语言:javascript
复制
prefix = get_file_key(my_model_instance.relevant_file_field)

备注:

你可能想根据你的需要在函数内部或周围实现错误捕获健全性检查-例如,如果file_field为None,函数将引发AttributeError -在大多数情况下,如果由于某种原因,field.name由于错误或只是因为保存了空字符串(如果没有设置位置,则为'/‘),您几乎肯定不希望仅以位置结束。

票数 3
EN

Stack Overflow用户

发布于 2021-10-15 07:04:13

您可以通过以下方式获取s3对象键:

代码语言:javascript
复制
ui = UserImage.objects.get(user=user_id, image=image_id)
bucket_key = ui.image.file.obj.key

'media/user_image/1497598249_49.jpeg'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44600110

复制
相关文章

相似问题

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