当前位置: 首页 > news >正文

node 第十四天 基于express的第三方中间件multer node后端处理用户上传文件

  1. Multer 是一个 node.js 中间件,用于处理multipart/form-data 类型的表单数据,它主要用于上传文件。它是写在 busboy 之上的所以非常高效。
  2. 前面我们已经知道了怎样利用express提供的静态资源处理中间件express.static()处理用户请求静态资源文件(图片, js, css等) 接下来学习如何处理用户上传文件, 编写处理上传文件的接口 (以图片为例)
  3. 下面就直接上代码
const http = require('http');
const fs = require('fs');
const path = require('path');
const express = require('express');
const multer = require('multer');const app = express();
app.use(express.json());//文件上传
//https://github.com/expressjs/multer
const storage = multer.diskStorage({destination: (req, file, cb) => {const uploadFile = req.params['upload_file'];const filename = path.join(__dirname, `./upload/${uploadFile}`);fs.existsSync(filename) || fs.mkdirSync(filename);cb(null, filename);},filename: (req, file, cb) => {console.log(file);let saveName = req.params['saveName'] || Date.now();let extName = path.extname(file.originalname || '.jpg');cb(null, saveName + '-' + Date.now() + extName);}
});
const upload = multer({ storage: storage });//express中间件的洋葱模型
app.use('/', (req, res, next) => {console.log('根路由');next();console.log('根路由 洋葱穿透');
});app.use('/user', (req, res, next) => {console.log('用户路由');next();console.log('用户路由 洋葱穿透');
});
//用户可以指定要保存在哪个文件夹(不存在则创建) 和 保存的文件名
app.use('/user/:upload_file/:saveName',(req, res, next) => {console.log('上传路由');next();console.log('上传路由 洋葱穿透');},upload.array('file'),(req, res, next) => {console.log(req.headers['content-type'], req.body);res.send({ msg: 'upload success !' });next();}
);const server = http.createServer(app);
server.listen(3010, () => {console.log('listening...');
});
  1. postmen测试一下就可以啦, 注意请求的数据类型应该是multipart/form-data
  2. 上面的代码还提到了express中间件的洋葱模型
    输出顺序是:
    根路由
    用户路由
    上传路由
    上传路由 洋葱穿透
    用户路由 洋葱穿透
    根路由 洋葱穿透

这是express中间件的重要机制, 逻辑上比较像dom事件的捕获与冒泡阶段

http://www.lryc.cn/news/216964.html

相关文章:

  • KnowledgeGPT:利用检索和存储访问知识库上增强大型语言模型10.30
  • Angular material Chips Autocomplete
  • 『亚马逊云科技产品测评』活动征文|搭建基础运维环境
  • 双指针扫描
  • uniapp小程序九宫格抽奖
  • mysql树状结构查询及注意事项
  • TimeGPT-1——第一个时间序列数据领域的大模型他来了
  • 通过Google搜索广告传送的携带木马的PyCharm软件版本
  • 网站文章收录因素,别人复制文章排名比你原创的好?
  • C#开源的一个能利用Windows通知栏背单词的软件 - ToastFish
  • 速拿offer,超全自动化测试面试题+答案汇总,背完还怕拿不到offer?
  • LeetCode----1415. 长度为 n 的开心字符串中字典序第 k 小的字符串
  • 2310C++协程超传服务器
  • 【排序算法】 计数排序(非比较排序)详解!了解哈希思想!
  • 20231103配置cv180zb的编译环境【填坑篇】
  • 足底筋膜炎如何治疗
  • rabbitMq路由键介绍
  • 【python基础】python切片—如何理解[-1:],[:-1],[::-1]的用法
  • 剑指JUC原理-9.Java无锁模型
  • 汽车托运使用的场景
  • 机器学习 - 加油站数据分析
  • 基于CMFB余弦调制滤波器组的频谱响应matlab仿真
  • helm一键部署grafana
  • pytorch复现_NMS
  • 备份doris数据到minio
  • Linux中正则表达式等
  • 记一次并发问题 Synchronized 失效
  • 手机平板摄像头如何给电脑用来开视频会议
  • windows docker desktop 更换镜像 加速
  • linux下多机器ssh免密码登录配置