无法打开多个上传的文件
Can't open multer uploaded files
嘿,有人遇到过这个问题吗?我正在尝试使用 multer(发送它们的邮递员)上传图像。较小的文件 ~50Kb 仅显示为空 text/plain 文件,较大的 ~2.1Mb 图像被上传但它们的大小不同(从原始的 2087736 字节到 2023146)并且我无法为 PNG 打开它们 - >(错误不是 png文件),在 jpeg 的情况下 ->(不是 JPEF 文件:以 0x8d 0x35 开头)。
在多个方面,我使用了一些过滤并有一些限制:
var photoUpload = multer({ storage: phtStorage, fileFilter: photoFilter, limits: limits }).single('file');
但他们并没有什么不同寻常
过滤器:
var photoFilter = function(req, file, cb) {
if (settings.acceptedPhotoTypes.indexOf(file.mimetype) !== -1)
cb(null, true);
else
cb('Invalid file type', false);
};
存储空间:
var phtStorage = multer.diskStorage({
destination: function (req, file, cb) {
var path = settings.photoProcessingSrcDir;
mkdirp(path, err => cb(err, path));
cb(null, path);
},
filename : function (req, file, cb) {
cb(null, req.fileName.toString());
}
});
限制:
var limits = { fileSize: 20000000 };
我做的唯一奇特的事情是将函数 photoUpload
传递给另一个函数,因为我想在实际上传之前进行一些数据库验证。
router.post('/:catalogId/:storeId', protected, function(req, res, next) {
if (f.type === 'photo') {
require('../helpers/files/post-photo')(photoUpload, req, res, next);
}
});
终于找到问题了。存储功能写得不好:
var phtStorage = multer.diskStorage({
destination: function (req, file, cb) {
var path = settings.photoProcessingSrcDir;
----> mkdirp(path, err => cb(err, path));
----> cb(null, path);
},
filename : function (req, file, cb) {
cb(null, req.fileName.toString());
}
});
两个 cb(回调函数)都被调用,导致 multers 内部流创建函数创建两个流。这真的把事情搞砸了...
嘿,有人遇到过这个问题吗?我正在尝试使用 multer(发送它们的邮递员)上传图像。较小的文件 ~50Kb 仅显示为空 text/plain 文件,较大的 ~2.1Mb 图像被上传但它们的大小不同(从原始的 2087736 字节到 2023146)并且我无法为 PNG 打开它们 - >(错误不是 png文件),在 jpeg 的情况下 ->(不是 JPEF 文件:以 0x8d 0x35 开头)。
在多个方面,我使用了一些过滤并有一些限制:
var photoUpload = multer({ storage: phtStorage, fileFilter: photoFilter, limits: limits }).single('file');
但他们并没有什么不同寻常
过滤器:
var photoFilter = function(req, file, cb) {
if (settings.acceptedPhotoTypes.indexOf(file.mimetype) !== -1)
cb(null, true);
else
cb('Invalid file type', false);
};
存储空间:
var phtStorage = multer.diskStorage({
destination: function (req, file, cb) {
var path = settings.photoProcessingSrcDir;
mkdirp(path, err => cb(err, path));
cb(null, path);
},
filename : function (req, file, cb) {
cb(null, req.fileName.toString());
}
});
限制:
var limits = { fileSize: 20000000 };
我做的唯一奇特的事情是将函数 photoUpload
传递给另一个函数,因为我想在实际上传之前进行一些数据库验证。
router.post('/:catalogId/:storeId', protected, function(req, res, next) {
if (f.type === 'photo') {
require('../helpers/files/post-photo')(photoUpload, req, res, next);
}
});
终于找到问题了。存储功能写得不好:
var phtStorage = multer.diskStorage({
destination: function (req, file, cb) {
var path = settings.photoProcessingSrcDir;
----> mkdirp(path, err => cb(err, path));
----> cb(null, path);
},
filename : function (req, file, cb) {
cb(null, req.fileName.toString());
}
});
两个 cb(回调函数)都被调用,导致 multers 内部流创建函数创建两个流。这真的把事情搞砸了...