如何使用django在ascii编码中的postgres bytea字段中保存图像

时间:2012-10-03 09:35:09

标签: django postgresql

我试图通过将图像转换为base64并将其保存到' bytea'来尝试在django中保存图像。 postgresql中的字段。我设法做到了,但字符串是用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'

1 个答案:

答案 0 :(得分:2)

使用带有base64编码文本的text字段,将二进制数据存储在bytea字段中。不要将base64编码的二进制文件存储在bytea字段中,这只会令人困惑。

我建议使用byteabytea_output = 'hex'(默认情况下为9.0及以上版本)。

相关问题