Node.js Nodejs,将bin文件作为BYTEA存储到pgsql中(已损坏的文件)
出于某种原因,我需要将一些文件(主要是图像或PDF)存储到我的数据库中(第9.2.20页)。 这些文件是由用户上传的,当我下载回来时,它们被破坏了Node.js Nodejs,将bin文件作为BYTEA存储到pgsql中(已损坏的文件),node.js,postgresql,buffer,koa,koa2,Node.js,Postgresql,Buffer,Koa,Koa2,出于某种原因,我需要将一些文件(主要是图像或PDF)存储到我的数据库中(第9.2.20页)。 这些文件是由用户上传的,当我下载回来时,它们被破坏了 我和nodejs一起工作 我存储文件的列类型是BYTEA 这就是我存储它们的方式: const { files, fields } = await asyncBusboy(ctx.req); const fileName = files[0].filename; const mimeType = files[0].mimeType; const
- 我和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}`);
该文件已损坏,当然,如果我仔细查看,上传的文件和下载的文件是不同的。
请参阅hex屏幕截图,在下载的屏幕截图开始处有一些附加数据:
<> P>在我把缓冲区放入CTX.体之后,再经过一些测试,我可以把问题归结为膝关节炎。它被破坏了(???)
编辑:我正在使用Swagger用户界面:您不应该将
bytea
用作常规文本字符串。你应该直接输入Buffer
,并让司机为你正确转义
不确定您正在使用哪个驱动程序,但例如
- 它是自动的吗
- 应该是自动执行的,它主要是这样做的,但我知道数组有问题
- -基于v3.0版,所以同样的故事-它只是工作
bytea
。我不能提供更多细节,因为我自己对knex不熟悉。@vitaly-t,所以说清楚,您建议将缓冲区保存在“text”postgreSQL列中?nodejs中的pbkdf2生成缓冲区,我想将其存储在postgreSQL中。我四处寻找,找到了你的答案。Thanks@slevin不,我从来没提过。您通常使用typebytea
,并直接保存typeBuffer
,让库自动转义它。我正在用Swagger客户端测试我的路由。当我在浏览器中调用url进行测试时,它会工作。。。