【发布时间】:2019-10-02 13:30:22
【问题描述】:
我需要在数据库中上传不超过 2 兆字节的文件和图像。但是下载图片有问题。所有下载的图像都会中断并且无法打开。文本文件没有这样的问题。
图片下载结果:
文件 2.png
2.png: data
以这种方式上传图片:
module.exports.upload = async function (req, res) {
const sysFileObj = {
COMMENTS: req.body.COMMENTS,
NAME: req.file.originalname,
MIMETYPE: req.file.mimetype,
FILE_CONTENT: req.file.buffer
};
try {
await SysFiles.create(sysFileObj);
res.status(201).json(sysFileObj);
} catch (e) {
errorHandler(res, e);
}
};
穆特:
const multer = require('multer');
const storage = multer.memoryStorage()
let obj = {
storage: storage,
limits: {
fileSize: 1024 * 1024 * 2
}
};
var upload = multer(obj)
module.exports = upload;
这里下载的时候有问题:
module.exports.download = async function (req, res) {
try {
let sysFile = await SysFiles.findById(req.params.SYSFILE_ID);
var fileContents = Buffer.from(sysFile._props.FILE_CONTENT);
var readStream = new stream.PassThrough();
readStream.end(fileContents);
res.set('Content-disposition', 'attachment; filename=' + sysFile._props.NAME);
res.set('Content-Type', sysFile._props.MIMETYPE);
readStream.pipe(res);
} catch (e) {
errorHandler(res, e);
}
};
我做错了什么?请告诉我。我必须马上说,我需要将图像上传到数据库,而不需要任何指向将存储图像的任何文件夹的链接。
注意:
但是,顺便说一下,当我使用“SQL”下载上传的图像时 开发者”,图像打开没有任何问题。
【问题讨论】:
-
你的错误信息是什么?
-
@SándorBakos
Fatal error reading PNG image file not a PNG file -
你在用mongodb吗?如果是真的,我认为你必须将
FILE_CONTENT保存为二进制数据,让我们尝试使用FILE_CONTENT: mongo.Binary(req.file.buffer)而不是FILE_CONTENT: req.file.buffer -
@hoangdv 不,我正在使用 oracledb + oracle-sage
-
我会检查 oracle 中的行是否包含我的文件。我会使用一些可以将文件导出到文件系统的客户端,并首先检查它是否可以在本地打开。如果是,您至少可以排除问题与上传有关。我的另一个赌注是提到@hoangdv,也许值得检查/共享表格DDL。