django-admin:像base64一样保存图像



我想通过django管理面板上传图像,但我需要将其保存为数据库中的base64字符串我该怎么做?+

  1. 我想在管理中看到图片
  2. DB可能有一天会移动,最好只保存base64字符串,这样我就不会依赖于某些文件结构(好像我会把原始图像存储在某个地方(

ps。我有django 2.2.6版本

将图像保存在数据库中被认为是一种糟糕的做法,您最好使用django存储并将图像保存到一些与S3兼容的外部存储服务中。

如果你坚持你的方法:为了能够通过Django管理员上传图像并将其存储为base64,你需要在模型中使用一种保存方法,将图像编码为b64并将数据保存在字段中。类似于:

import base64

class Image(models.Model):
...
image_file = models.ImageField(upload_to='images/', default='blank.jpg')
image_b64 = models.BinaryField(blank=True, null=True)
def save(self, *args, **kwargs):
if self.image_file:
img_file = open(self.image_file.url, "rb")
self.image_b64 = base64.b64encode(img_file.read())
super(Image, self).save(*args, **kwargs)

你可以在你的Admin上显示ImageField,通过Admin.py删除Base64字段。如果你想从Base64字段在Admin中显示它,那么你可以把它保存为添加标签的html字符串(也可以在Admin.py中用图像小部件设置字段来显示它(。模型可能类似于:

class Image(models.Model):
...
image_file = models.ImageField(upload_to='images/', default='blank.jpg')
image_b64 = models.TextField(blank=True)
def save(self, *args, **kwargs):
if self.image_file:
img_file = open(self.image_file.url, "rb")
data = base64.b64encode(img_file.read())
self.image_b64 = format_html('<img src="data:;base64,{}">', data)
super(Image, self).save(*args, **kwargs)

相关内容

最新更新