關于node使用multer進行文件的上傳與下載
首先了解下瀏覽器的自動下載:
使用Express靜態(tài)資源中間件的默認行為是在瀏覽器中展示靜態(tài)文件,而不是自動下載。
如果需要訪問靜態(tài)資源時自動下載,可以在HTTP響應中設置Content-Disposition頭。Content-Disposition頭指示瀏覽器以何種方式處理要下載的文件。
常見的Content-Disposition值有"inline"和"attachment"。當Content-Disposition的值為"attachment"時,瀏覽器會自動下載文件,示例代碼如下:
app.use('/uploads', express.static(__dirname + '/uploads', {
setHeaders: (res, path) => {
res.setHeader('Content-Disposition', 'attachment');
}
}));再來了解下multer:
Multer是一個Node.js中間件,用于處理表單數(shù)據中的multipart/form-data類型。主要用于上傳文件,將上傳的文件保存到指定的目錄中。
Multer還提供了多個方法,這些方法可以根據不同的需求設置文件上傳的行為。比如:single()方法用于上傳單個文件,none()方法表示不接受任何文件,fields()方法用于上傳多個字段的文件,limits屬性用于限制上傳文件的大小等
接下來開始準備:
//html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>圖片上傳</title>
</head>
<body>
<input type="file" id="fileInput">
<br><br>
<button onclick="upload()">上傳</button>
<script>
function upload() {
const formData = new FormData()
formData.append('image', document.getElementById('fileInput').files[0])
fetch('http://127.0.0.1:3000/upload', {
method: 'POST',
body: formData
})
.then(response => response.text())
.then(result => {
console.log(result)
})
}
</script>
</body>
</html>//app.js
const express = require('express')
const app = express()
// 創(chuàng)建上傳路由
app.post('/upload', (req, res) => {
res.send('hello world')
})
// 啟動服務器
app.listen(3000, () => {
console.log('Server running on http://localhost:3000')
})安裝Multer,npm i Multer,根目錄新建一個uploads文件夾 然后對app.js進行配置:就實現(xiàn)了文件上傳
const express = require('express')
const multer = require('multer')
const path = require('path')
const app = express()
// diskStorage創(chuàng)建上傳存儲器
const storage = multer.diskStorage({
// 設置上傳文件存儲目錄
destination: function (req, file, cb) {
cb(null, './uploads/')
},
//保存在 uploads 中的文件名
filename: function (req, file, cb) {
const extname = path.extname(file.originalname) // 獲取文件后綴名
const filename = Date.now() + '-' + extname // 時間戳+后綴名 生成唯一文件名
cb(null, filename)
}
})
//創(chuàng)建一個名為upload的文件上傳示例
const upload = multer({ storage: storage })
// 創(chuàng)建上傳路由
// upload.single('image') 處理單個文件上傳
app.post('/upload', upload.single('image'), (req, res) => {
const file = req.file
if (!file) {
return res.status(400).send('請選擇要上傳的圖片')
}
res.send('上傳成功')
})
// 啟動服務器
app.listen(3000, () => {
console.log('Server running on http://localhost:3000')
})然后實現(xiàn)文件下載,也是對app.js進行配置:url+uploads+上傳的文件就可以實現(xiàn)下載
const express = require('express')
const multer = require('multer')
const path = require('path')
const app = express()
XXXXXXXXXXXXXXX 跟上面一樣的
app.use('/uploads', express.static(__dirname + '/uploads', {
setHeaders: (res, path) => {
// 當Content-Disposition的值為"attachment"時,瀏覽器會自動下載文件
res.setHeader('Content-Disposition', 'attachment');
}
}));
// 啟動服務器
app.listen(3000, () => {
console.log('Server running on http://localhost:3000')
})到此這篇關于關于node使用multer進行文件的上傳與下載的文章就介紹到這了,更多相關node使用multer文件上傳下載內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Node.js如何實現(xiàn)注冊郵箱激活功能 (常見)
今天了解了node如何實現(xiàn)郵箱激活功能,這個功能非常常見,當我們注冊一個賬號時,肯定會有這步,下面看下如何實現(xiàn)這個功能2017-07-07
nodeJS(express4.x)+vue(vue-cli)構建前后端分離實例(帶跨域)
這篇文章主要介紹了nodeJS(express4.x)+vue(vue-cli)構建前后端分離實例(帶跨域) ,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
基于Alpine Linux構建前端node-web鏡像步驟詳解
這篇文章主要為大家介紹了基于Alpine Linux構建前端node-web鏡像步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11

