【问题标题】:Saving a Base64 string representing an image on Django database在 Django 数据库中保存表示图像的 Base64 字符串
【发布时间】:2021-09-01 11:34:13
【问题描述】:

我是 Django 的新手,我正在寻找在我的 Dajango 数据库/服务器上存储 Base64 图像的最佳方式。

我的目标是能够通过 http 请求发送批量图像,因此将它们作为编码的 Base64 图像发送是有意义的,我最终可能会在网页上呈现它们,但它们主要会被发送到桌面应用程序分批。

查看其他几篇帖子后,似乎有三种方法,但我不确定哪种方法最适合我的需求。

  1. 在模型 TextField 中存储 Base64 字符串
  2. 在 FileField 中存储 Base64 字符串
  3. 将图像存储在图像字段中,并在需要时将其转换为 Base64

我对选项 1 的担忧是在数据库中存储大型文本字段会影响性能,但是就像我说我是新手,所以我真的不知道。

选项 2 对我来说似乎很有意义,因为这类似于 django 处理图像的方式,将它们存储在其他位置并仅引用数据库中的位置。但是,我不确定这是否仅仅是因为 sqlite 不支持这种类型的字段。我还看到了额外开销的可能性,必须打开和读取文件而不是仅读取文本字段。

由于我的用例,最后选项 3 似乎是一个相当没有吸引力的选项,因为这些 base64 图像将主要通过 http 请求分批发送,所以我认为最好存储转换后的版本而不是对每个图像进行编码每个请求。

我非常感谢社区提供的关于哪种方法对我来说最有意义的见解。你有什么想法?

跟进问题,如果我打算将我的数据库转换为 Postgres,我应该采用哪种方法有什么变化吗?

【问题讨论】:

  • 通常最好使用文件系统存储文件,因为数据库对数据的编码效率较低,因此需要更多带宽。

标签: django base64


【解决方案1】:

最好不要在数据库中存储二进制数据。通常,这将需要转义以创建/更新/检索数据,从而导致访问效率降低。

通常使用FileField [Django-doc]ImageField [Django-doc]。对于这两个模型字段,它会将文件存储在文件系统中,并将路径保存在数据库中。因此,这将减少加载或保存对象的开销。

您可以决定存储文件的 base64 编码,但这可能不会更有效:这意味着从磁盘读取文件需要更多时间。编码为 base64 是有效的,因此以紧凑的方式存储文件并返回在视图中创建的 base64 可能会更有效。

【讨论】:

  • 感谢您的回复,那么在我想将一组照片打包成 http 响应时,将每个图像存储在 ImageField 中然后将每个图像编码为 Base64 是否有意义?跨度>
  • @KKochiss:通过使用ImageField,您将把图像存储在文件系统上。但是,我会对其进行 base64 编码,因为这会使文件变大,您可以在您将提供该文件的视图中动态地将其编码为 base64。
猜你喜欢
  • 2021-09-01
  • 2020-09-17
  • 2011-09-10
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 2017-01-27
相关资源
最近更新 更多