2017-05-04 63 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內​​流創建函數來創建兩個流。這真的弄髒了東西...