无法打开multer上传的文件

时间:2017-05-04 20:04:18

标签: image express multer

嘿,有人有这个问题。我正在尝试使用multer上传图像(postman用于发送它们)。较小的文件~50Kb仅显示为空文本/普通文件,较大的~2.1Mb图像上传但其大小不同(从原始的2087736字节到2023146)并且我无法打开它们用于PNG - > (错误不是png文件)和jpeg案例 - > (不是JPEF文件:以0x8d 0x35开头)。

在multer方面,我使用了一些过滤并有一些限制:

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); 
  }

});

1 个答案:

答案 0 :(得分:0)

我终于找到了问题。存储功能写得不好:

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