1.Multer是node.js的一個中間件,用于處理multipart/form-data類型的表單資料,它主要用于上傳檔案。(Multer不會處理任何非multipart/form-data類型的表單資料)
2.Multer的使用:
1)Multer會添加一個body對象以及file或files對象到express的request對象中,body對象包含表單的文本域資訊,file或files對象包含對象表單上傳的檔案資訊。
2)基本使用方法:
//引入multer子產品,主要應用于圖檔或檔案的上傳
const multer = require("multer");
//第一件事情 讀檔案 将檔案放在指定的區域
//第二件事件 更改檔案名稱
//配置項
var storage = multer.diskStorage({
//将上傳的檔案存儲在指定的位置
destination: function (req, file, cb) {
//浏覽器在執行項目時,會從public檔案夾開始,是以将圖檔儲存在項目中時的路徑是以public檔案夾開始的
cb(null, './public/img')
},
//将上傳的檔案做名稱的更改
filename: function (req, file, cb) {
//file.originalname儲存着圖檔的名稱
cb(null, Date.now()+"-"+file.originalname);//在圖檔名稱的前面加上時間戳,以防上傳同一張圖檔時會被覆寫
}
})
var upload = multer({ storage: storage })
//指定目前字段可以攜帶多少個檔案
//name的屬性值需要和formData.append("logo",logo[0].files[0]);中定義的屬性名相同
//maxCount表示最多可以攜帶多少個檔案
var cpUpload = upload.fields([{ name: 'logo', maxCount: 1 }])
//導出配置項
module.exports = {
cpUpload
}
3)伺服器接收formData資訊:
//req.files中儲存着存入圖檔的所有資訊(一個對象,鍵為存入伺服器的key值:logo,值為一個數組),req.files.logo為一個數組,裡面包含着圖檔的所有資訊
//req.files.logo[0].path儲存着圖檔在本項目中的絕對路徑(public\\img\\1.jpg),但是需要将其轉換為http://localhost:3000/public\img\1.jpg的形式
let path = req.files.logo[0].path;
var reg = /public\\img\\(.+)/;//在服務端中解析\不能使用\\,(.+)中.表示任意字元,+表示1到多個字元
var newPath = path.replace(reg,($0,$1)=>{
//$0表示比對整個正則,$1表示reg中第一個括号裡的内容,如果有$2則表示reg中的第二個括号的内容
var str = "http://localhost:3000/img/";//此時的圖檔是以detail.html起點開始找的,是以前面的路徑應該要把public去掉,直接找到img檔案夾,不然圖檔的路徑會尋找不到
return str += $1;
})
轉載于:https://www.cnblogs.com/Leslie-Cheung1584304774/p/10544131.html