Node.js + pg 向PostgreSQL的bytea字段插入二进制数据的正确方法是什么
插入二进制数据的正确操作步骤
- 确认PostgreSQL表字段类型
存储二进制数据的img_data字段必须设置为bytea类型,该类型是PostgreSQL专门用于存储二进制数组的字段类型。 - 二进制数据转Node.js Buffer类型
pg库对bytea类型的参数要求必须传入Node.js标准Buffer实例,你当前拿到的product_image_data是二进制字符串格式(从你写文件时指定binary编码可以确认),需要手动转换为Buffer:
const req = "INSERT INTO public.product (" + "name, doc_name, purchase_price, selling_price, weight, " + "id_string, landing_url, img_data, img_name, active) " + "VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);"; const values = [ obj.product_name, obj.product_doc_name, obj.product_purchase_price, obj.product_selling_price, obj.product_weight, obj.product_id_string, obj.product_landing_url, // 替换原来的obj.product_image_data,转成Buffer Buffer.from(obj.product_image_data, 'binary'), obj.product_image_name, // 若active字段为boolean类型,建议直接传布尔值而非字符串 true ];
- 可选:优化Express请求解析配置
如果你的接口仅用于上传二进制数据,可以直接使用express.raw()中间件解析请求体,此时req.body本身就是Buffer实例,不需要额外转换。
验证方法
插入成功后查询该条数据,拿到的img_data字段会是Buffer类型,可直接用fs.writeFileSync('./test.png', 查询返回的img_data)写成本地文件验证完整性。
内容的提问来源于stack exchange,提问作者Joe Dudinski
相关产品推荐
相关产品推荐

