multer 依賴詳解

`multer` 是一個用于處理 `multipart/form-data` 類型表單數據的 Node.js 中間件,主要用于文件上傳。它基于 `busboy` 構建,使用起來非常方便。

一、安裝

npm install multer

二、基本使用

const express = require("express");const multer = require("multer");const app = express();// 配置 multerconst storage = multer.diskStorage({destination: function (req, file, cb) {cb(null, "uploads/");},filename: function (req, file, cb) {cb(null, file.originalname);},});const upload = multer({ storage: storage });// 處理文件上傳的路由app.post("/upload", upload.single("file"), (req, res) => {res.send("文件上傳成功");});const port = 3000;app.listen(port, () => {console.log(`服務器運行在端口 ${port}`);});

三、配置選項

1. `storage`

`storage` 選項用于指定文件的存儲方式,`multer` 提供了兩種存儲引擎:

1.1 `diskStorage`

將文件存儲到磁盤上。你可以通過 `destination` 和 `filename` 函數來指定文件的存儲目錄和文件名。

const storage = multer.diskStorage({destination: function (req, file, cb) {cb(null, "uploads/"); // 指定存儲目錄},filename: function (req, file, cb) {cb(null, Date.now() + "-" + file.originalname); // 指定文件名},});

1.2 `memoryStorage`

將文件存儲在內存中,以 `Buffer` 對象的形式存在。適用于需要對文件進行進一步處理(如上傳到云存儲)而不需要將文件保存到本地磁盤的場景。

const storage = multer.memoryStorage();const upload = multer({ storage: storage });

2. `limits`

`limits` 選項用于限制上傳文件的大小、字段數量等。常見的限制選項包括:

`fileSize`:文件的最大大小(以字節為單位)。

`files`:允許上傳的文件數量。

`fields`:允許的表單字段數量。

const upload = multer({storage: storage,limits: {fileSize: 1024 * 1024 * 5, // 限制文件大小為 5MB},});

3. `fileFilter`

`fileFilter` 選項用于過濾允許上傳的文件類型。你可以通過回調函數來決定是否接受某個文件。

const fileFilter = function (req, file, cb) {// 只允許上傳圖片文件if (file.mimetype.startsWith("image/")) {cb(null, true);} else {cb(new Error("只允許上傳圖片文件"), false);}};const upload = multer({storage: storage,fileFilter: fileFilter,});

四、處理不同類型的文件上傳

1. 單個文件上傳

使用 `upload.single(fieldname)` 處理單個文件上傳,其中 `fieldname` 是表單中文件字段的名稱。

app.post("/upload", upload.single("file"), (req, res) => {// req.file 包含上傳的文件信息console.log(req.file);res.send("文件上傳成功");});

2. 多個文件上傳(固定數量)

使用 `upload.array(fieldname, maxCount)` 處理多個文件上傳,`maxCount` 是允許上傳的最大文件數量。

app.post("/upload-multiple", upload.array("files", 3), (req, res) => {// req.files 是一個包含多個文件信息的數組console.log(req.files);res.send("多個文件上傳成功");});

3. 多個文件上傳(混合字段)

使用 `upload.fields(fields)` 處理包含多個文件字段的表單,`fields` 是一個包含每個字段名稱和最大文件數量的數組。

app.post("/upload-mixed",upload.fields([{ name: "avatar", maxCount: 1 },{ name: "photos", maxCount: 3 },]),(req, res) => {// req.files 是一個對象,包含每個字段的文件信息console.log(req.files);res.send("混合文件上傳成功");});

五、上傳文件的信息

當文件上傳成功后,`multer` 會將文件的相關信息添加到 `req.file`(單個文件上傳)或 `req.files`(多個文件上傳)中。常見的文件信息包括:

`fieldname`:表單中文件字段的名稱。

`originalname`:文件的原始名稱。

`encoding`:文件的編碼類型。

`mimetype`:文件的 MIME 類型。

`size`:文件的大小(以字節為單位)。

`destination`:文件的存儲目錄(使用 `diskStorage` 時)。

`filename`:文件在存儲目錄中的名稱(使用 `diskStorage` 時)。

`path`:文件的完整路徑(使用 `diskStorage` 時)。

`buffer`:文件的二進制數據(使用 `memoryStorage` 時)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72159.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

點云配準技術的演進與前沿探索:從傳統算法到深度學習融合(4)

4、點云配準面臨的挑戰與應對策略 4.1 點云配準面臨的主要挑戰 在點云配準的實際應用中,盡管已經取得了顯著的研究成果,但仍然面臨著諸多復雜而嚴峻的挑戰,這些挑戰嚴重制約了點云配準技術在更多領域的廣泛應用和深入發展。 在自動駕駛場景…

PostgreSQL10 物理流復制實戰:構建高可用數據庫架構!

背景 PostgreSQL 10 在高可用架構中提供了物理復制,也稱為流復制(Streaming Replication),用于實現實例級別的數據同步。PostgreSQL 復制機制主要包括物理復制和邏輯復制:物理復制依賴 WAL 日志進行物理塊級別的同步&…

?算法OJ?位操作實戰【計數】(C++ 實現)

191. Number of 1 Bits Given a positive integer n, write a function that returns the number of set bits in its binary representation (also known as the Hamming weight). int hammingWeight(uint32_t n) {int count 0;while (n) {count n & 1; // 檢查最低位…

從二維隨機變量到多維隨機變量

二維隨機變量 設 X X X和 Y Y Y是定義在同一樣本空間 Ω \varOmega Ω上的兩個隨機變量,稱由它們組成的向量 ( X , Y ) (X, Y) (X,Y)為二維隨機變量,亦稱為二維隨機向量,其中稱 X X X和 Y Y Y是二維隨機變量的分量。 采用多個隨機變量去描述…

RabbitMQ系列(一)架構解析

RabbitMQ 架構解析 RabbitMQ 是一個基于 AMQP 協議的開源消息中間件,其核心架構通過多組件協作實現高效、可靠的消息傳遞。以下是其核心組件與協作流程的詳細說明: 一、核心組件與功能 Broker(消息代理服務器) RabbitMQ 服務端核…

Ubuntu 下 nginx-1.24.0 源碼分析 - ngx_list_init

ngx_list_init 定義在 src\core\ngx_list.h static ngx_inline ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t *pool, ngx_uint_t n, size_t size) {list->part.elts ngx_palloc(pool, n * size);if (list->part.elts NULL) {return NGX_ERROR;}list->par…

Linux切換Python版本

1、更新apt sudo apt update2、查詢python安裝路徑 which python 或者which python33、查詢安裝版本 # 查看所有以 "python" 開頭的命令(包括版本號) ls -l 安裝路徑* 例如 ls -l /usr/bin/python*4、修改軟連接 udo unlink /usr/bin/pyt…

Spring Cloud之注冊中心之Nacos的使用

目錄 Naacos 服務注冊/服務發現 引?Spring Cloud Alibaba依賴 引入Nacos依賴 引入Load Balance依賴 配置Nacos地址 服務端調用 啟動服務 Naacos Nacos是Spring Cloud Alibaba的組件, Spring Cloud Alibaba遵循Spring Cloud中定義的服務注冊, 服務發現規范. 因此使?Na…

使用通義萬相Wan2.1進行視頻生成

使用通義萬相Wan2.1進行視頻生成 源代碼準備運行環境準備創建Python虛擬環境并激活安裝依賴包 模型下載生成視頻官網的視頻生成例子簡單描述場景視頻生成示例詳細描述場景視頻生成示例 最近通義萬相開源了其視頻生成模型。模型有兩個版本,一個是1.3B的,一…

鴻蒙HarmonyOS 開發簡介

鴻蒙開發入門教程 一、技術簡介 鴻蒙操作系統(HarmonyOS)是面向萬物互聯時代的全場景分布式操作系統,具備分布式軟總線、分布式數據管理、分布式任務調度等核心能力,能讓設備間實現無縫連接與協同,為用戶提供統一、流…

docker和containerd從TLS harbor拉取鏡像

私有鏡像倉庫配置了自簽名證書,https訪問,好處是不需要處理免費證書和付費證書帶來的證書文件變更,證書文件變更后需要重啟服務,自簽名證書需要將一套客戶端證書存放在/etc/docker/cert.d目錄下,或者/etc/containerd/c…

linux ununtu通過nginx-1.6.2.tar.gz安裝nginx并安裝在自定義目錄XXX下 的步驟

Ubuntu 下通過源碼安裝 Nginx 1.6.2 到自定義目錄 /home/aot/nginx 的步驟 以下是將 Nginx 1.6.2 源碼包離線安裝到自定義目錄的詳細流程,包含依賴管理、編譯配置和服務管理: 一、準備工作 1. 下載源碼包和依賴(需聯網環境準備)…

C++ 變量的輸入輸出教程

一、變量的基本概念 在 C 中,變量是用于存儲數據的命名內存位置。在使用變量之前,需要先聲明它的類型和名稱,這樣編譯器才能為其分配適當大小的內存空間。例如: int age; // 聲明一個整型變量 age double salary; // 聲明一個…

React底層常見的設計模式

在React中,常見的設計模式為開發者提供了結構化和可重用的解決方案,有助于提高代碼的可維護性和可擴展性。以下是對React中幾種常見設計模式的詳細解析,并附上示例代碼和注釋: 1. 容器組件與展示組件模式(Container/P…

【MATLAB例程】三維下的IMM(交互式多模型),模型使用CV(勻速)和CA(勻加速)

給出三維下的交互式多模型(IMM)matlab例程,模型使用勻速運動CV和勻加速運動CA,濾波使用EKF(擴展卡爾曼濾波) 文章目錄 代碼運行結果程序結構 代碼講解模型定義:軌跡生成:IMM核心流程…

物理內存組織與分配的核心概念

在 Linux 內核內存管理(尤其是 Buddy System 伙伴系統)中,node、zone、type 和 order 是描述物理內存組織與分配的核心概念。以下是它們的詳細解釋: 1. Node(NUMA 節點) 定義: 在 NUMA&#xf…

智科技賦能寵物關懷新時代

在科技日新月異的今天,智能寵物監控技術正悄然引領寵物護理領域的新變革。借助尖端的傳感器技術、高清攝像頭以及強大的數據分析能力,這些智能系統為寵物主人開辟了前所未有的寵物關懷途徑,讓愛與關懷跨越時空限制。 智能寵物監控系統的核心…

SOME/IP 教程知識點總結

總結關于SOME/IP的教程,首先通讀整個文件,理解各個部分的內容。看起來這個教程從介紹開始,講到了為什么在車輛中使用以太網,然后詳細講解了SOME/IP的概念、序列化、消息傳遞、服務發現(SOME/IP-SD)、發布/訂閱機制以及支持情況。 首先,我需要確認每個章節的主要知識點。…

playbin之autoplug_factories源碼剖析

一、autoplug_factories_cb /* Called when we must provide a list of factories to plug to pad with caps.* We first check if we have a sink that can handle the format and if we do, we* return NULL, to expose the pad. If we have no sink (or the sink does not…

58區間和+44開發商購買土地(前綴和)

58. 區間和(第九期模擬筆試) 題目描述 給定一個整數數組 Array,請計算該數組在每個指定區間內元素的總和。 輸入描述 第一行輸入為整數數組 Array 的長度 n,接下來 n 行,每行一個整數,表示數組的元素。…