使用TypeORM保存Postgres BYTEA上的缓冲区仅存储10字节 [英] Saving Buffer on Postgres bytea with TypeORM only store 10 bytes
本文介绍了使用TypeORM保存Postgres BYTEA上的缓冲区仅存储10字节的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试将一些图像保存在Postgres数据库上,但仅保存了10字节的数据。
流程如下:
我在服务器上收到一个base64编码的字符串,然后将其加载到缓冲区,将其设置为我的实体并保存。 但是,然后尝试从数据库恢复该信息,我只得到了10个字节的数据,并在查询中使用octet_length()进行了验证。我的实体属性定义:
@Column({ "name": "entima_imagem", "type": "bytea", "nullable": false })
entima_imagem: Buffer;
接收数据并保存的代码:
entity.entima_imagem = Buffer.from(base64String, "base64");
const repository = this.getRepositoryTarget(Entity);
const saved = await repository.save<any>(entity);
在服务器上,在保存之前,我正在将文件写入光盘,我可以毫无问题地将其可视化。
推荐答案
基于评论https://github.com/typeorm/typeorm/issues/2878#issuecomment-432725569和从那里开始使用祸不单行格式想法https://www.postgresql.org/docs/9.0/datatype-binary.html我做了以下工作:
将缓冲区解码为祸不单行字符串,使用x对其进行转义,然后再次将其加载到缓冲区。
entity.entima_imagem = Buffer.from("\x" + Buffer.from(base64String, "base64").toString("hex"));
现在数据已保存,没有问题,我可以按预期方式检索它们。
看起来不是很优雅,但暂时解决了问题。
这篇关于使用TypeORM保存Postgres BYTEA上的缓冲区仅存储10字节的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文