稱及大小限制
隨著網路的不斷發展,檔案上傳已經成為了許多網站的必要功能之一。在Node.js中,檔案上傳可以使用多種模組和技術來實作。下面,我們將介紹一種基於Express框架的檔案上傳方法,並探討如何實現檔案上傳的大小及名稱限制。
本文中我們將使用Express框架作為Web伺服器,並使用multer模組來處理檔案上傳。我們先來安裝這些依賴模組:
npm install express multer --save
#下面是一個基本的檔案上傳路由的範例:
const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/upload', upload.single('file'), function(req, res) { res.send('文件上传成功!'); }); app.listen(3000, function() { console.log('服务器已启动,端口号:3000'); });
在上面的程式碼中,我們使用multer的upload.single
方法來處理檔案上傳,單一檔案的name屬性必須是file
。上傳成功後,伺服器傳回一段字串。
現在我們來實作檔案大小的限制,我們可以透過在multer的設定中指定limits
屬性來實現。範例如下:
const upload = multer({ dest: 'uploads/', limits: { fileSize: 1024 * 1024 //限制1M } });
在上述範例中,我們設定上傳檔案的最大大小為1M(單位是位元組)。如果上傳的檔案大小超過了這個值,multer會自動回傳一個錯誤。我們可以在路由的回呼函數中透過判斷req.file是否存在來檢查錯誤。範例如下:
app.post('/upload', upload.single('file'), function(req, res) { // 文件大小超出限制 if (req.file.size > 1024 * 1024) { return res.status(400).send('文件大小不能超过1M'); } res.send('文件上传成功!'); });
在上述範例中,如果檔案大小超出了1M,則傳回400錯誤碼和一段錯誤訊息。
如果我們想要實作對上傳的檔案名稱進行限制,我們可以使用multer的fileFilter
方法來實作。在fileFilter
方法中,我們可以對上傳的檔案名稱進行判斷,如果滿足條件,則繼續上傳,否則拋出錯誤。範例如下:
const storage = multer.diskStorage({ destination: function(req, file, cb) { cb(null, './uploads') }, filename: function(req, file, cb) { // 只允许上传后缀名为jpg, jpeg和png的文件 if (!/.(jpg|jpeg|png)$/.test(file.originalname)) { return cb(new Error('只能上传jpg, jpeg和png格式的图片')); } //自定义文件名称 let timestamp = Date.now(); cb(null, timestamp + '.' + file.originalname.split('.').pop()); } }); const upload = multer({ storage: storage, limits: { fileSize: 1024 * 1024 //限制1M }, fileFilter: function(req, file, cb) { // 检查文件类型 if (!file.originalname.match(/.(jpg|jpeg|png)$/)) { return cb(new Error('只能上传jpg, jpeg和png格式的图片')); } // 继续上传 cb(null, true); } }); app.post('/upload', upload.single('file'), function(req, res) { res.send('文件上传成功!'); });
在上述範例中,我們增加了一個filename
方法,在檔案上傳之前對檔案名稱進行判斷並修改。另外,我們也使用fileFilter
方法判斷檔案名稱是否符合規定,如果不符合,則拋出錯誤。
透過上述例子,我們學會了使用Express和multer模組來實現檔案上傳及大小、名稱限制。相信讀者們可以在實際開發上靈活應用。值得注意的是,我們在生產環境中應該對文件上傳進行更嚴格的安全檢查和限制。
以上是nodejs實作檔案上傳名的詳細內容。更多資訊請關注PHP中文網其他相關文章!