Django文件存储:如何获取媒体文件的基本网址?

时间:2018-02-08 14:38:12

标签: django storage gcloud base-url

我正在使用gcloud封装成django-storages逻辑。我从来没有使用我的存储桶的url路径提供服务:只提供了DEFAULT_FILE_STORAGE和GS_BUCKET_NAME,它们是我的glcoud项目和存储的名称。

我的问题是:如何获取图片的完整网址?我的图像与相对网址一起保存,这使得对数据库感觉敏感。但我找不到任何关于如何获取django.core.files.storage对象存储集合的基本URL的正确文档。

某些filestorage对象会询问有效的相对图片网址,以便检索完整路径。但这不是我想要的:我只想知道(以编程方式)我(只有一个)桶的基本URL。模板{% image item.image %}能够生成完整的网址,但从代码方面来看,它对我来说似乎完全模糊不清。

任何帮助或建议?

1 个答案:

答案 0 :(得分:5)

获取完整的URL比获取前缀并加入某些端点存储的URL的相对部分更容易。

Django文件存储后端的基类是Storage。这个类有一个url方法,很可能在任何值得其薪水的云存储后端实现:

  

<强> URL(名称)
  返回可以访问name引用的文件内容的URL。对于不支持URL访问的存储系统,这将引发NotImplementedError。

因此,只需在API中序列化此方法的结果即可。例如,如果您已将模型序列化为名为“data”的dict,则可以使用以下命令将“image”字段从相对更新为绝对值:

relative_url = data.get("image")
full_url = relative_url and default_storage.url(relative_url)
data.update({"image": full_url})