Ruby on Rails to Postgres二进制编码

时间:2016-07-12 03:09:48

标签: ruby-on-rails postgresql encoding

我有一个Ruby on Rails + Postgresql应用程序将文件图像保存到db中,在一些postgres安装中数据被错误地保存在它看起来像不同的bytea格式中,因此某些postgres安装中的图像无法正确返回文件< / p>

工作节省数据

  

\ XFF \ XD8 \ XFF \ XE1 \ X00 \ X \ XFF \ XEE \ X00 \ x0EAdobe \ x00d \ XC0 \ X00 \ X00 \ X00 \ X01 \ XFF \ XDB \ X00 \ X84 \ X00 \ X06 \ X04 \ X04 \ X04 \ X05 \ X04 \ X06 \ X05 \ X05 \ X06 \吨\ X06 \ X05 \ X06 \吨符\ v \ b \ X06 \ X06 \ b符\ v \˚F\ n \ n符\ v \ n \ n \ ˚F\ X10 \˚F\˚F\˚F\˚F\˚F\˚F\ X10 \˚F\ x0E \ X0F \ X10 \ X0F \ x0E \˚F\ X13 \ X13 \ X14 \ X14 \ X13 \ X13 \ X1C。\ E。\ E \ è\ X1C \ x1F的\ x1F的\ x1F的\ x1F的\ x1F的\ x1F的\ x1F的\ x1F的\ x1F的\ x1F的\ X01 \一个\一个\一个\ r \˚F\ r \ X18 \ X10 \ X10 \ X18 \ X1A \ X15 \ X11 \ X15

未工作的数据

  

x89504e470d0a1a0a0000000d494844520000014a0000003d0806000000cb7920c80000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000047eb4944415478daec5d07781455d79e99edbdef269bb62940208426bd4a5110503e51c40e28d8051145fcec62ff4041c08628624169a28234419ad2a477d2934db2bdf736ffb95bc226a46c4240f1cf7d9e81ecececade7bef73de79e7b062749126b4b6da92db5a5b6d470

任何建议??

Screenshot

回报率

在RoR上,我这样做是为了保存文件

data = (!file.nil?) ? file.read.force_encoding("UTF-8") : nil

Brand.create!({name: brand[:name], value: brand[:value], file: file,  file_properties: get_file_properties(file_url), default: brand[:default], data: data})

并获取文件图像

image_tag(o.get_base64_image, style: 'max-width:100%')

使用模型方法

def get_base64_image
    return self.data != nil ? 'data:image/png;base64,' +     Base64.encode64(self.data) : ""
  end

两台服务器的服务器编码均为UTF-8

的Postgres

potgresql.conf

bytea_output = 'escape'

工作服务器

List of databases
        Name        |   Owner    | Encoding |   Collate   |    Ctype    |     Access privileges     
--------------------+------------+----------+-------------+-------------+---------------------------
 postgres            | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

无效服务器

List of databases
   Name    |  Owner   | Encoding |  Collation  |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | es_MX.UTF-8 | es_MX.UTF-8 | 

1 个答案:

答案 0 :(得分:0)

问题与postgresql中BYTEA列的输出有关,我解决了这样的问题:

ALTER ROLE postgres SET bytea_output TO 'escape';