如何将Django中的文件存储在模型中?
嗯,我知道FileField,但我不明白它是如何工作的,因为我希望能够存储文件,而没有路径,因为我正在为一个项目制作一个云存储网站,并希望能够存储该文件。
当用户想要更改文件名时,我怎么能更改它呢?
我将尝试简单地解释它是如何工作的,因为它将帮助您决定最适合您的解决方案。
- 本地系统存储
您将路径存储在数据库中,并将字段上的存储类设置为FileSystemStorage
,这意味着django将知道如何从运行django应用程序的同一系统的硬盘进行写入和读取。因此,基本上,您存储的普通文件都引用了它们在目录中的位置。
- 云存储
类似于本地系统,但您保存的不是本地路径,而是uri位置,您将通过http或类似s3的自定义协议通过网络获取文件,而不是本地系统。为了实现这一点,您需要声明一个自定义存储类,在其中定义要从云存储上传和删除的自定义save
和delete
方法。
你可以自己写:https://docs.djangoproject.com/en/3.1/howto/custom-file-storage/
或者使用库:https://github.com/jschneier/django-storages
- 数据库存储
如果您知道文件是文本,您可以读取它们并将文本直接保存在数据库中以及相关的元数据中。如果它们是二进制的,你可以将它们存储为Blob类型——这里的风险是性能缓慢和数据库膨胀的风险。AFAIK将二进制文件存储在数据库之外是一种更好的做法。