在node中,multer是一個用於處理「multipart/form-data」類型資料格式的中間件,主要用於上傳檔案;該中間件在解析完請求體後,會向Request對象中新增一個body物件和一個file或files物件。
本文操作環境:Windows10系統、nodejs 12.19.0版、Dell G3電腦。
Multer 是一個 node.js 中間件,用於處理 multipart/form-data 類型的表單數據,它主要用於上傳檔案。它是寫在 busboy 之上非常有效率。
注意: Multer 不會處理任何非multipart/form-data 類型的表單資料
Multer在解析完請求體後,會在Request物件中新增一個body物件和一個file或files物件(上傳多個檔案時使用files物件)。
其中,body物件中包含所提交表單中的文字欄位(如果有),而file(或files)物件中包含透過表單上傳的檔案。
Tips:multipart/form-data是用來指定傳輸資料的特殊類型的,主要就是我們上傳的非文字的內容,例如圖片或mp3等等
const express = require('express') const multer = require('multer') const app = express() const storage = multer.diskStorage({ //保存路径 destination: function (req, file, cb) { cb(null, '/tmp/my-uploads') //注意这里的文件路径,不是相对路径,直接填写从项目根路径开始写就行了 }, //保存在 destination 中的文件名 filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) } }) const upload = multer({ storage: storage }) app.post('/profile', upload.single('avatar'), function (req, res, next) { // req.file 是 `avatar` 文件的信息 // req.body 将具有文本域数据,如果存在的话 }) app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) { // req.files 是 `photos` 文件数组的信息 // req.body 将具有文本域数据,如果存在的话 }) const cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }]) app.post('/cool-profile', cpUpload, function (req, res, next) { // req.files 是一个对象 (String -> Array) 键是文件名,值是文件数组 // 例如: // req.files['avatar'][0] -> File // req.files['gallery'] -> Array // req.body 将具有文本域数据,如果存在的话 })
# multer(options)
Multer 接受一個options 對象,其中最基本的是dest 屬性,這將告訴Multer 將上傳檔案保存在哪裡。如果你省略 options 對象,這些檔案將會保存在記憶體中,永遠不會寫入磁碟。
通常,一般的網頁應用,只需要設定 dest 屬性,像這樣:
const upload = multer({ dest: 'uploads/' })
如果你想在上傳時進行更多的控制,你可以使用 storage 選項替代 dest。 Multer 具有 DiskStorage 和 MemoryStorage 兩個儲存引擎; 另外還可以從第三方獲得更多可用的引擎。
推薦學習:《nodejs影片教學》
以上是node中multer是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!