2017-05-04 92 views
0

嘿,有人有这个问题。我正尝试使用MULTER(邮递员发送邮件)上传图片。较小的文件〜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); 
    } 

}); 

回答

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内​​流创建函数来创建两个流。这真的弄脏了东西...