Django 文件存储:如何获取媒体文件的基数 url?
Django files storage: How to get base url of media file?
我正在使用包装到 django 存储逻辑中的 gcloud。我从来没有用我的存储桶的 url 路径提供服务:只提供了 DEFAULT_FILE_STORAGE 和 GS_BUCKET_NAME,它们是我的 glcoud 项目和存储的名称。
我的问题是:如何获得完整的 url 图片?我的图像保存在一个相对 url 中,这对数据库有意义。但是我找不到任何关于如何获取 django.core.files.storage 对象存储集合的基础 url 的正确文档。
一些文件存储对象要求有效的相对图像 url 以检索完整路径。但这不是我想要的:我只想(以编程方式)知道我的(只有一个)存储桶的基数 url。模板 {% image item.image %}
能够生成完整的 url,但从代码的角度来看,它对我来说似乎完全晦涩难懂。
有什么帮助或建议吗?
获取完整的 URL 比获取前缀并加入由某些端点存储的 URL 的相关部分更容易。
Django 文件存储后端的基础 class 是 Storage。这个 class 有一个 url
方法,很可能在任何物有所值的云存储后端中实现:
url(name)
Returns the URL where the contents of the file referenced by name can be accessed. For storage systems that don’t support access by URL this will raise NotImplementedError instead.
所以只需在您的 API 中序列化此方法的结果。例如,如果您的模型已经序列化为名为 "data" 的字典,您可以使用以下命令将 "image" 字段从相对更新为绝对:
relative_url = data.get("image")
full_url = relative_url and default_storage.url(relative_url)
data.update({"image": full_url})
我正在使用包装到 django 存储逻辑中的 gcloud。我从来没有用我的存储桶的 url 路径提供服务:只提供了 DEFAULT_FILE_STORAGE 和 GS_BUCKET_NAME,它们是我的 glcoud 项目和存储的名称。
我的问题是:如何获得完整的 url 图片?我的图像保存在一个相对 url 中,这对数据库有意义。但是我找不到任何关于如何获取 django.core.files.storage 对象存储集合的基础 url 的正确文档。
一些文件存储对象要求有效的相对图像 url 以检索完整路径。但这不是我想要的:我只想(以编程方式)知道我的(只有一个)存储桶的基数 url。模板 {% image item.image %}
能够生成完整的 url,但从代码的角度来看,它对我来说似乎完全晦涩难懂。
有什么帮助或建议吗?
获取完整的 URL 比获取前缀并加入由某些端点存储的 URL 的相关部分更容易。
Django 文件存储后端的基础 class 是 Storage。这个 class 有一个 url
方法,很可能在任何物有所值的云存储后端中实现:
url(name)
Returns the URL where the contents of the file referenced by name can be accessed. For storage systems that don’t support access by URL this will raise NotImplementedError instead.
所以只需在您的 API 中序列化此方法的结果。例如,如果您的模型已经序列化为名为 "data" 的字典,您可以使用以下命令将 "image" 字段从相对更新为绝对:
relative_url = data.get("image")
full_url = relative_url and default_storage.url(relative_url)
data.update({"image": full_url})