使用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;
😜喜欢文章或文章内容有帮助的话留下足迹鼓励一下博主吧~