node.js:《介面實現文件的上傳和下載》
使用node.js寫上傳文件和下載文件的介面
上傳介面:
開始寫介面前,我們先安裝一個上傳文件的插件:npm install multer
安裝成功在package.json或package-lock.json包中能看到
在主文件引入模組:
//配置文件上傳臨時目錄
const upload = multer({
dest:'./public/upload/temp'//臨時存放路徑
})
配置所有介面可下載
//設置所有介面都允許上傳功能
uploadFile.use(upload.any())
然後在路由中引入fs模組,寫一個上傳功能的介面
const fs = require("fs");//重新定義文件模組
router.post('/upload', (req, res) => {
//檢查是否有文件
if (!req.files) {//如果req是空 返回400
res.send({
code: 400,
msg: '上傳文件不能為空',
});
return;
}
//保存文件
let files = req.files; //將獲取的文件放到files
let ret_files = []; //定義一個空數組
for (let file of files) {//將files循環成單個
//獲取名字後綴
let file_ext = file.originalname.substring(file.originalname.lastIndexOf('.') + 1);
//將文件名改為時間戳
let file_name = new Date().getTime() + '.' + file_ext
//移動文件並且修改文件名字
fs.renameSync(
process.cwd() + "/public/upload/temp/" + file.filename,//file.filename:文件最初名字 /public/upload/temp/作為中轉站
process.cwd() + "/public/upload/" + file_name, //file_name:時間戳新起的名字
);
//將改完的文件寫進空數組
ret_files.push("./public/upload/" + file_name)
}
res.send({
code: 200,
msg: 'OK',
data: ret_files //返回data給前端預覽
})
})
測試:
在「/public/upload/」下可以看到一個已經有一個以時間戳命名的文件了
下載介面:
//下載介面
router.get('/download',async(req,res)=>{
let file_name = req.query.file_name;
let file_path = process.cwd()+'/public/upload/'+file_name;
res.download(file_path);
})
完整程式碼:
uploadFile.js
const express = require('express')//引入模組
const uploadFile = express()//實例化
const multer = require('multer')//引入實例化上傳文件模組
const port = 8080 //埠
//配置文件上傳臨時目錄
const upload = multer({
dest:'./public/upload/temp'//臨時存放路徑
})
//設置所有介面都允許上傳功能
uploadFile.use(upload.any())
//引入路由--接入其他介面
uploadFile.use('/route',require("./router/fileRouter"))//通過路由的方式將上傳和下載介面引入
//監聽
uploadFile.listen(port, () => {
//監聽成功列印以下語句
console.log(`Example app listening on port ${port}`)
})
fileRouter.js:
const express = require("express");
const fs = require("fs");
var router = express.Router();
//post請求 寫個介面測試一下路由會不會報錯
// router.post('/test',function(req,res){
// // res.send(req.body)
// res.send('ok')
// })
//寫上傳介面
router.post('/upload', (req, res) => {
//檢查是否有文件
if (!req.files) {//如果req是空 返回400
res.send({
code: 400,
msg: '上傳文件不能為空',
});
return;
}
//保存文件
let files = req.files; //將獲取的文件放到files
let ret_files = []; //定義一個空數組
for (let file of files) {//將files循環成單個
//獲取名字後綴
let file_ext = file.originalname.substring(file.originalname.lastIndexOf('.') + 1);
//將文件名改為時間戳
let file_name = new Date().getTime() + '.' + file_ext
//移動文件並且修改文件名字
fs.renameSync(
process.cwd() + "/public/upload/temp/" + file.filename,//file.filename:文件最初名字
process.cwd() + "/public/upload/" + file_name, //file_name:時間戳新起的名字
);
//將改完的文件寫進空數組
ret_files.push("./public/upload/" + file_name)
}
res.send({
code: 200,
msg: 'OK',
data: ret_files //返回data給前端預覽
})
})
//下載介面
router.get('/download',async(req,res)=>{
let file_name = req.query.file_name;
let file_path = process.cwd()+'/public/upload/'+file_name;
res.download(file_path);
})
//3、把它加到模組上
module.exports = router;
😜喜歡文章或文章內容有幫助的話留下足跡鼓勵一下部落客吧~