在 Django 数据库中保存表示图像的 Base64 字符串
Saving a Base64 string representing an image on Django database
我是 Django 的新手,我正在寻找在我的 Dajango 上存储 Base64 图像的最佳方式 db/server。
我的目标是能够通过 http 请求发送批量图像,因此将它们作为编码的 Base64 图像发送是有意义的,我最终可能会在网页上呈现它们,但它们主要会发送到批量桌面应用程序。
浏览其他几篇文章后,似乎有三种方法,但我不确定哪种方法最适合我的需要。
- 在模型 TextField 中存储 Base64 字符串
- 在 FileField 中存储 Base64 字符串
- 将图像存储在图像字段中,并在需要时将其转换为 Base64
我对选项 1 的担忧是,在数据库中存储大文本字段会影响性能,但是就像我说的,我是新手,所以我真的不知道。
选项 2 对我来说似乎很有意义,因为这类似于 django 处理图像的方式,通过将它们存储在其他地方并仅引用数据库中的位置。但是,我不确定这是否仅仅是因为 sqlite 不支持这种类型的字段。我还看到了额外开销的可能性,必须打开和读取文件而不是只读取文本字段。
最后,由于我的用例,选项 3 似乎不是一个有吸引力的选项,因为这些 base64 图像将主要通过 http 请求批量发送,所以我认为最好存储转换后的版本而不是对每个图像进行编码根据每个请求提供图像。
我将不胜感激社区可以提供的关于哪种方法对我来说最有意义的任何见解。你有什么想法?
跟进问题,如果我打算将我的数据库转换为 Postgres,我应该采取哪种方法有什么改变吗?
最好不要在数据库中存储二进制数据。通常这将需要转义为 create/update/retrieve 数据,因此导致访问效率较低。
通常做的是使用 FileField
[Django-doc] or an ImageField
[Django-doc]。对于这两个模型字段,它会将文件存储在文件系统中,并在数据库中保存路径。因此,这将减少加载或保存对象的开销。
您可以决定存储文件的 base64 编码,但这可能不会更有效:这意味着从磁盘读取文件需要更多时间。编码为 base64 是高效的,因此以紧凑的方式存储文件和 return 在视图中创建的 base64 可能会更有效。
我是 Django 的新手,我正在寻找在我的 Dajango 上存储 Base64 图像的最佳方式 db/server。
我的目标是能够通过 http 请求发送批量图像,因此将它们作为编码的 Base64 图像发送是有意义的,我最终可能会在网页上呈现它们,但它们主要会发送到批量桌面应用程序。
浏览其他几篇文章后,似乎有三种方法,但我不确定哪种方法最适合我的需要。
- 在模型 TextField 中存储 Base64 字符串
- 在 FileField 中存储 Base64 字符串
- 将图像存储在图像字段中,并在需要时将其转换为 Base64
我对选项 1 的担忧是,在数据库中存储大文本字段会影响性能,但是就像我说的,我是新手,所以我真的不知道。
选项 2 对我来说似乎很有意义,因为这类似于 django 处理图像的方式,通过将它们存储在其他地方并仅引用数据库中的位置。但是,我不确定这是否仅仅是因为 sqlite 不支持这种类型的字段。我还看到了额外开销的可能性,必须打开和读取文件而不是只读取文本字段。
最后,由于我的用例,选项 3 似乎不是一个有吸引力的选项,因为这些 base64 图像将主要通过 http 请求批量发送,所以我认为最好存储转换后的版本而不是对每个图像进行编码根据每个请求提供图像。
我将不胜感激社区可以提供的关于哪种方法对我来说最有意义的任何见解。你有什么想法?
跟进问题,如果我打算将我的数据库转换为 Postgres,我应该采取哪种方法有什么改变吗?
最好不要在数据库中存储二进制数据。通常这将需要转义为 create/update/retrieve 数据,因此导致访问效率较低。
通常做的是使用 FileField
[Django-doc] or an ImageField
[Django-doc]。对于这两个模型字段,它会将文件存储在文件系统中,并在数据库中保存路径。因此,这将减少加载或保存对象的开销。
您可以决定存储文件的 base64 编码,但这可能不会更有效:这意味着从磁盘读取文件需要更多时间。编码为 base64 是高效的,因此以紧凑的方式存储文件和 return 在视图中创建的 base64 可能会更有效。