我有一个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
任何建议??
在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
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 |
答案 0 :(得分:0)
问题与postgresql中BYTEA列的输出有关,我解决了这样的问题:
ALTER ROLE postgres SET bytea_output TO 'escape';