node.js學習之post文件上傳 (multer中間件)


express為了性能考慮,采用按需加載的方式,引入各種中間件來完成需求,

平時解析post上傳的數據時,是用body-parser。 但這個中間件有缺點,只能解析post的文本內容,(application/x-www-form-urlencoded)不能接收post上傳的文件。

接收post上傳的文件(multipart/form-data),所以需要借助 multer 中間件。 

安裝

cnpm install multer

 

首先先看下 進過multer處理過的過長什么樣

 

可以看到originalname: 是用戶上傳前的文件名,

falename是 multer保存在服務器指定位置的文件名,

path是保存在服務器的路徑, 注意他是沒有后綴的,或許是為了安全,這點特別麻煩。沒有后綴的文件,不能正常的使用,這就需要借助path.parse() 功能解析文件,獲取文件信息,這里需要文件的后綴名,拼接一個新的文件名,   ,在用fs.rename方法重命名舊文件,下面看詳細代碼

 

 1 const express = require('express');  2 
 3 const multer = require('multer');  4 const fs=require('fs');  5 const pathLib = require('path');  6 
 7 //dest是指定上傳的文件保存在那里。
 8 var objMulter = multer({dest: '../www/upload/'});  9 
10 var ser = express(); 11 
12 //any() 表示接受任何文件, single(‘表單name’)接受一個指定formname文件。
13 ser.use(objMulter.any()); 14 
15 
16 ser.post('/', function (req, res) { 17  console.log(req.files) 18     //新文件名
19     // 這是重點, 新文件名 = path + 后綴名
20     var newName = req.files[0].path + pathLib.parse(req.files[0].originalname).ext; 21 
22     // 使用fs模塊的rename重命名方法重名字保存的文件,才能正常使用
23     //rename('舊文件名,新文件, 回調 ')
24     fs.rename(req.files[0].path, newName, function (err) { 25         if(err) { 26             res.send('上傳失敗') 27         }else{ 28             res.send('上傳成功') 29  } 30  res.end(); 31  }) 32 }) 33 
34 ser.listen(8080)

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM