出于某种原因,我需要将一些文件(主要是图像或 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