gpt4 book ai didi

node.js - Nodejs,将 bin 文件作为 BYTEA 存储到 pgsql 中(损坏的文件)

转载 作者:搜寻专家 更新时间:2023-10-31 23:58:46 26 4
gpt4 key购买 nike

出于某种原因,我需要将一些文件(主要是图像或 pdf)存储到我的数据库 (PG 9.2.20) 中。这些文件是由用户上传的,当我下载回来时,它们已损坏。

  • 我正在使用 nodejs。
  • 我存储文件的列类型是 BYTEA。

这是我存储它们的方式:

const { files, fields } = await asyncBusboy(ctx.req);
const fileName = files[0].filename;
const mimeType = files[0].mimeType;
const bufferedFile = fs.readFileSync(files[0].path, { encoding: 'hex' });
const fileData = `\\x${bufferedFile}`;

//Just a basic insert into with knex.raw
const fileId = await storageModel.create(fields.name, fields.description, fileName, mimeType, fileData, ctx.user);

这就是我检索文件的方式:

const file = await storageModel.find(ctx.params.fileId, ctx.user);
ctx.body = Buffer.from(file.file_bin, 'hex');
ctx.set('Content-disposition', `attachment; filename=${file.file_name}`);

文件损坏了,当然仔细一看,上传的和下载的不一样。查看十六进制屏幕截图,在下载的开始处有一些额外的数据:http://imgur.com/a/kTRAB

经过更多测试后,当我将缓冲区放入 ctx.body 时,我可以看出问题出在 koa 部分。它已损坏(???)

编辑:我正在使用 Swagger UI:https://github.com/swagger-api/swagger-ui/issues/1605

最佳答案

您不应将bytea 用作常规文本字符串。您应该直接传入 Buffer 类型,并让驱动程序为您正确转义它。

不确定您使用的是哪个驱动程序,但是例如...

关于node.js - Nodejs,将 bin 文件作为 BYTEA 存储到 pgsql 中(损坏的文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45118197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com