在 Web 開發領域,處理文件上傳是常見要求。無論是個人資料圖片、文件還是圖像,許多應用程式都需要安全且有效率地上傳和儲存文件。將 Node.js 與 Express 結合使用時,Multer 是可順利處理此任務的最佳函式庫之一。
在本部落格中,我們將介紹有關在 Node.js 中使用 Multer 所需了解的所有信息,包括安裝、配置、存儲選項、文件過濾以及常見用例和程式碼範例。
Multer 是用來處理 multipart/form-data 的中間件,multipart/form-data 是 Web 應用程式中上傳檔案的常用格式。它專門設計用於與 Express 配合使用,並透過提供以下功能來幫助管理文件上傳:
要開始使用 Multer,請透過 npm 安裝它:
npm install multer
讓我們先在 Express 應用程式中使用 Multer 設定基本檔案上傳處理程序。開始方法如下:
const express = require('express'); const multer = require('multer'); const app = express(); // Configure Multer for basic usage const upload = multer({ dest: 'uploads/' }); // Destination folder for uploaded files // Single File Upload Route app.post('/upload', upload.single('file'), (req, res) => { res.send('File uploaded successfully!'); }); app.listen(3000, () => console.log('Server running on port 3000'));
在此範例中:
Multer 提供兩種主要儲存選項:
磁碟儲存提供了對檔案命名和目標路徑的更多控制。
npm install multer
在記憶體儲存中,檔案被儲存為緩衝區,這對於短期檔案或在不將檔案儲存到磁碟的情況下處理上傳非常有用。
const express = require('express'); const multer = require('multer'); const app = express(); // Configure Multer for basic usage const upload = multer({ dest: 'uploads/' }); // Destination folder for uploaded files // Single File Upload Route app.post('/upload', upload.single('file'), (req, res) => { res.send('File uploaded successfully!'); }); app.listen(3000, () => console.log('Server running on port 3000'));
對於生產應用程序,將檔案直接儲存在雲端儲存(如 AWS S3)上通常更可取。若要與 S3 集成,請使用 multer-s3。
const storage = multer.diskStorage({ destination: (req, file, cb) => cb(null, 'uploads/'), // Folder location filename: (req, file, cb) => { const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9); cb(null, uniqueSuffix + '-' + file.originalname); } }); const upload = multer({ storage: storage });
const upload = multer({ storage: multer.memoryStorage() });
此設定將繞過本機存儲,直接將檔案上傳到指定的 S3 儲存桶。
您可以按類型過濾文件以僅接受特定的文件格式(例如圖像)。使用檔案過濾選項。
npm install aws-sdk multer-s3
要防止上傳大文件,請設定限制選項。以下是將檔案大小限制為 1MB 的方法:
const aws = require('aws-sdk'); const multerS3 = require('multer-s3'); aws.config.update({ region: 'your-region' }); const s3 = new aws.S3(); const upload = multer({ storage: multerS3({ s3: s3, bucket: 'your-s3-bucket-name', metadata: (req, file, cb) => cb(null, { fieldName: file.fieldname }), key: (req, file, cb) => cb(null, Date.now().toString() + '-' + file.originalname) }) });
Multer也支援多個檔案上傳:
const fileFilter = (req, file, cb) => { // Accept only image files if (file.mimetype.startsWith('image/')) { cb(null, true); // Accept file } else { cb(new Error('Only image files are allowed!'), false); // Reject file } }; const upload = multer({ storage: storage, fileFilter: fileFilter });
正確的錯誤處理對於流暢的使用者體驗至關重要。 Multer 可以拋出多種類型的錯誤,您可以像這樣處理:
const upload = multer({ storage: storage, limits: { fileSize: 1 * 1024 * 1024 } // 1 MB limit });
以下是使用 Multer 的一些實際應用:
Multer 透過提供靈活的儲存選項、檔案過濾以及處理從單一檔案到多個檔案的各種上傳要求,簡化了 Node.js 應用程式中的檔案處理。無論您是建立小型應用程式還是具有檔案處理需求的生產級應用程序,Multer 都能滿足您的需求。
編碼快樂! ?
以上是使用 Multer 在 Node.js 中處理檔案上傳:綜合指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!