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

标签 django postgresql

我试图通过将图像转换为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 字段中,这会造成困惑。

我建议使用 byteabytea_output = 'hex'(9.0 及更高版本中默认)。

关于django - 如何使用 django 以 ascii 编码将图像保存在 postgres bytea 字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12705680/

相关文章:

java - 未使用迁移查询的默认值创建 JPA 实体

java - 硬件调整在笔记本电脑上运行良好的应用程序?

ruby-on-rails - 新数据不会持久保存到 Postgres 上的 Rails 数组列

php - 是否有可能在插入之前获取要插入数据库的id

python - Django 'OneToOneField' 对象没有属性 'id'

python - Django 导入错误 - 没有名为 django.conf.urls.defaults 的模块

python - 在 Django 类基础 View 中创建自定义方法

django - 使用 post_save 信号模拟 django 模型上的方法

mysql - 无法让 MySQL/MariaDB 在 Fedora 24 上与 Django 1.10.1 和 Python 3.5 配合使用?

python - 我应该如何配置 Amazon EC2 来执行可并行化的数据密集型计算?