node.js:《接口实现文件的上传和下载》

使用node.js写上传文件和下载文件的接口

上传接口:

开始写接口前,我们先安装一个上传文件的插件: npm install multer

安装成功在package.json或package-lock.json包中能看到

node.js:《接口实现文件的上传和下载》

在主文件引入模块:

//配置文件上传临时目录
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给前端预览
        })
})

测试:

node.js:《接口实现文件的上传和下载》

在”/public/upload/”下可以看到一个已经有一个以时间戳命名的文件了

node.js:《接口实现文件的上传和下载》

下载接口:

//下载接口
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;

😜喜欢文章或文章内容对您有帮助点个赞鼓励一下吧~

Original: https://www.cnblogs.com/xz1005xfx/p/16838783.html
Author: 小小小侠
Title: node.js:《接口实现文件的上传和下载》

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/799878/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 在shell脚本里面调用conda创建的环境

    事情源于,我在写脚本的时候,在脚本里面插入了一句 conda activate 环境名, 然后出现如下的报错提示 …

    Python 2023年9月9日
    046
  • 机器学习开篇之机器学习的分类

    目录 1 引言 2 机器学习分类 2.1 监督学习(Supervised Learning) 2.1.1 传统监督学习 2.1.2 非监督学习 2.1.3 半监督学习 2.1.4 …

    Python 2023年10月9日
    026
  • 几亿人都在玩的谷歌小恐龙游戏,全世界最高分是 99999?你呢?

    前言 “越努力越幸运鸭💦💦,记得每天进步一点点哦!” ——Python是世界上最好的语言 Everybody 大家好~(也不清楚我的开头的单词写错没,懒.j…

    Python 2023年9月21日
    058
  • Flask入门(一)

    追溯到最初,Flask 诞生于 Armin Ronacher 在 2010 年愚人节开的一个玩笑。后来,它逐渐发展成为一个成熟的 Python Web 框架,越来越受到开发者的喜爱…

    Python 2023年8月13日
    055
  • Scrapy 2.6 Feed exports 数据文件输出使用指南

    回答1: 是一款功能强大的 框架,可用于抓取和提取网页数据。以下是使用 进行数据爬取和解析的一些基本步骤: 1. 创建一个 项目:在命令行中使用” startproje…

    Python 2023年10月3日
    041
  • 可视化神器Plotly玩转柱状图

    可视化神器Plotly玩转柱状图 本文是可视化神器Plotly绘图的第5篇:重点讲解如何利用Plotly绘制 柱状图。柱状图在可视化图中是出现频率非常高的一种图表,能够很直观地展现…

    Python 2023年8月17日
    049
  • python3教程:默认参数为列表

    定义一个函数,传入一个list,添加一个end再返回 def add_end(L=[]): L.append(‘END’) return L 正常调用时,结果似乎不错 print …

    Python 2023年11月2日
    028
  • 关于Java的JTextPane组件(探索ing)

    ps:这篇文章不得不说,拖了很久了(几个月吧)。最近决定来完成它,嘿嘿 基于网上对于该组件的知识比较杂,或者说没什么人讲解组件,然后经自己的探索和学习其他人关于”JTe…

    Python 2023年6月9日
    080
  • Django学习第一天记录

    1.安装Django(Windows环境) 首先需要确定系统中存在python环境,当前,本机的python环境为python 3.6.6,可以使用命令python –…

    Python 2023年8月6日
    045
  • Ubuntu16.04 下python的matplotlib库加入中文字体(微软雅黑)

    一、首先安装微软雅黑字体 如果字体文件较多可以新建一个文件夹 sudo mkdir ms sudo cp msyh.ttf /usr/share/fonts/ms sudo chm…

    Python 2023年9月1日
    0150
  • 双十一到了,当我用Python采集了电商平台所有商品后发现….

    Python采集电商平台 写在前面 环境及模块 案例实现思路 代码展示 效果展示 最后 写在前面 这不是双十一快到了,为了以最优惠的价格买到自己想买的商品,我不惜用Python把y…

    Python 2023年8月1日
    070
  • 通过cmd指令创建vue项目

    通过cmd指令创建vue项目 基础材料: 已安装node.js已安装 npm(安装node.js后会自带安装npm) 首先通过node –v和npm –v确保他们都安装了,能够看见…

    Python 2023年9月30日
    034
  • pandas索引函数loc和iloc的区别

    使用pandas进行数据分析的时候,我们经常需要对DataFrame的行或者列进行索引。使用pandas进行索引的方法主要有三种:直接使用行或者列标签、loc函数和iloc函数。 …

    Python 2023年8月6日
    060
  • 接口自动化框架python+pytest+Allure 思路总结

    前言: 好久没有更新博客了,新的一年该对过去一年的学习经验做一个总结了~ 之前一直用unittest库做接口自动化测试框架,最近发现pytest库太好用了,而且参数化起来很方便,因…

    Python 2023年9月13日
    048
  • Vue 模板语法

    Vue.js使用基于HTML的模板语法,允许开发者声明式地将DOM绑定至地层Vue实例的数据. 所有Vue.js的模板都是合法的HTML,所以能被遵循规范的浏览器和HTML解析器解…

    Python 2023年6月12日
    055
  • Python 引入模块的四种方法(超详细)

    使用import调用模块可以调用第三方库和标准库,以及自己做的,自己做的import+py文件名就可以了,我们使用requests第三方库举例: import requests# …

    Python 2023年8月1日
    041
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球