无法打开多个上传的文件

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 内部流创建函数创建两个流。这真的把事情搞砸了...