【发布时间】:2023-11-29 18:47:02
【问题描述】:
我正在 Pythonanywhere.com 上用 Django 构建一个网站,我正在使用 Backblaze 的 B2 云存储来存储所有静态和媒体文件。我上传到 Backblaze 的 css 和图像正在运行,但我无法弄清楚所有内容应该如何组合在一起,所以这就是我所在的位置(最小化):
在这个模型中,我想存储一个缩略图,我有一个可以上传的表单。
class Post(models.Model):
(...)
thumbnail = models.ImageField(null=True, blank=True, width_field="width_field", height_field="height_field")
(...)
Backblaze 包含我需要的 http 请求和响应的所有代码,所以我只是将它们粘贴到一个单独的文件中。我首先需要获得一个帐户授权令牌,然后是一个上传 url,然后我才能发送文件。
所以整个函数需要三个东西作为输入:文件日期、文件名和文件大小。作为输出,我得到了文件 ID(以及其他内容,详细信息 here)。
现在我想知道我需要在哪里调用该上传函数,我认为它与 ImageField 中的“upload_to”参数有关。而且我想知道 ImageField 中实际存储了什么,因为我没有告诉 ImageField 找到文件的位置。它是否使用设置文件中的媒体根目录,我该如何管理?
【问题讨论】:
-
您的意思是您不想将图像存储在 PythonAnywhere 的磁盘上,而是希望将其存储在 backblaze 中?图像是您的用户提交的吗?或者您是否有预上传的图像,现在只想显示?
-
正确,我想使用 Backblaze 作为 CDN。我已经预先上传了图片和 css/JavaScript 文件,我得到了这些工作。现在我确实想让用户上传图片并将它们存储在那里。
-
查看 django-storages。它支持大多数存储后端(但不支持 backblaze)。似乎您只需要为后端实现读/写/关闭/大小方法,就可以了。您甚至可以提交拉取请求,让他们将其合并到上游!
标签: python django file-upload cdn