前端使用的是elementUI里面的upload封裝好的組件
1.引入multer 和 fs(沒有則需要npm下載)
var multer=require('multer');
var fs=require('fs');
2.創(chuàng)建storage,storage提供了訪問特定于域名下的會(huì)話存儲(chǔ)或本地存儲(chǔ)的功能,例如可以添加、修改或刪除存儲(chǔ)的數(shù)據(jù)項(xiàng)。
如果你想要操作一個(gè)域名的會(huì)話存儲(chǔ),可以使用Window.sessionStroage,如果想要操作一個(gè)域名的本地存儲(chǔ),可以使用window.localstroage
var storage = multer.diskStorage({
destination: function (req, file, cb) {
// 接收到文件后輸出的保存路徑(若不存在則需要?jiǎng)?chuàng)建)
cb(null, 'upload/');
},
filename: function (req, file, cb) {
// 將保存文件名設(shè)置為 時(shí)間戳 + 文件原始名,比如 151342376785-123.jpg
cb(null, Date.now() + "-" + file.originalname);
}
});
3.創(chuàng)建文件夾
var createFolder = function (folder) {
try {
// 測試 path 指定的文件或目錄的用戶權(quán)限,我們用來檢測文件是否存在
// 如果文件路徑不存在將會(huì)拋出錯(cuò)誤"no such file or directory"
fs.accessSync(folder);
} catch (e) {
// 文件夾不存在,以同步的方式創(chuàng)建文件目錄。
fs.mkdirSync(folder);
}
};
4.創(chuàng)建上傳文件路徑
var uploadFolder = './upload/';
createFolder(uploadFolder);
5.創(chuàng)建 multer 對象
var upload = multer({ storage: storage });
6.為前端提供上傳接口
router.post('/upload', upload.single('file'), function (req, res, next) {
var file = req.file;
console.log('文件類型:%s', file.mimetype);
console.log('原始文件名:%s', file.originalname);
console.log('文件大?。?s', file.size);
console.log('文件保存路徑:%s', file.path);
// 接收文件成功后返回?cái)?shù)據(jù)給前端
res.json({ res_code: '0', name: file.originalname, url: file.path });
});