2

画像を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'
4

1 に答える 1

2

textbase64 でエンコードされたテキストを含むフィールドを使用する、バイナリ データをbyteaフィールドに格納します。byteabase64 でエンコードされたバイナリをフィールドに格納しないでください。混乱を招くだけです。

byteaandを使用することをお勧めしbytea_output = 'hex'ます (9.0 以降のデフォルト)。

于 2012-10-03T09:52:47.750 に答える