我试图通过将图像转换为base64并将其保存到postgresql中的“bytea”字段来保存django中的图像。我已经成功做到了,但是字符串是用 UTF8 编码的。有没有办法可以只针对该字段编码为 ascii?
这是我的自定义 Base64 模型字段的代码:
import base64
from django.db import models
class Base64Field(models.TextField):
def contribute_to_class(self, cls, name):
if self.db_column is None:
self.db_column = name
self.field_name = name + '_base64'
super(Base64Field, self).contribute_to_class(cls, self.field_name)
setattr(cls, name, property(self.get_data, self.set_data))
def get_data(self, obj):
#return obj.data_base64 #this works if the image is ascii-encoded
return base64.b64decode(getattr(obj, self.field_name)) #this also works well with the setter below
def set_data(self, obj, data):
setattr(obj, self.field_name, base64.encodestring(data)) #is encoded to UTF8
def db_type(self, connection):
return 'longtext'
最佳答案
使用包含 Base64 编码文本的 text
字段,或者将二进制数据存储在 bytea
中 field 。不要将 base64 编码的二进制文件存储在 bytea
字段中,这会造成困惑。
我建议使用 bytea
和 bytea_output = 'hex'
(9.0 及更高版本中默认)。
关于django - 如何使用 django 以 ascii 编码将图像保存在 postgres bytea 字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12705680/