express 处理 multipart/form-data 类型请求

本文介绍了如何使用multer中间件处理Express应用中的multipart/form-data类型请求,包括基本使用、上传控制如文件存储、过滤、大小限制,以及异常处理的多种方法,帮助理解multer在文件上传中的作用和配置选项。
摘要由CSDN通过智能技术生成

前言

  1. Express v4.16.0 引入了 express.json()express.urlencoded() 中间件,express.json() 可解析json类型的req.body,express.urlencoded() 可解析urlencoded类型的req.body;
  2. Express v4.17.0 又引入 express.raw()express.text() 中间件,express.raw() 可解析raw类型的req.body(解析为Buffer), express.text() 可解析text类型的req.body(解析为String);
  3. 上述 express.json()、express.raw()、express.text()、express.urlencoded() 中间件,实际上都是基于 body-parser 中间件封装的;
  4. 上述4种中间件对于处理大部分类型的req.body足够了,但却无法处理multipart类型的req.body, body-parser 官网 也很明确的告诉我们 not handle multipart bodies,而且推荐了用于处理 multipart bodies 的其他中间件,如下图
    body-parser官网介绍,不支持处理multipart类型的body

multer 安装

这里我选择 multer中间件来处理 multipart/form-data类型数据。其主要用于上传文件,它是写在 busboy 之上非常高效。
multer 详细介绍及使用方式请参考: multer 官网

在应用项目中执行npm命令,安装multer中间件。

$ npm install multer

multer 使用

1. 基本使用

Multer 中间件会在express的request对象中添加 body、file、files 等对象,其中 req.body 中包含文本域信息,req.file、req.files 对象包含表单上传的文件信息。

const express = require("express");
const multer = require("multer");
const router = express.Router();
const upload = multer();

router.post('/This_is_router_path', upload.'中间件方法', function (req, res) {
   
  // req.body 获取文本域信息
  // req.file、req.files 获取上传的文件信息
})
module.exports = router;

接下来做详细的使用介绍 ↓↓↓(为了方便介绍,示例代码只给出重点部分)

.none() 仅文本域信息

// .none() 不需要参数,使用该中间件的路由,只处理表单的文本域信息,保存在req.body
// 如果任何文件上传到这个模式,将发生"LIMIT_UNEXPECTED_FILE"错误
router.post("/upload/none", upload.none(),function (req,res){
   
    let ret = {
   
        "text_field": req.body,
        "file_field": req.file
    }
    res.send(ret);
})

表单仅有文本域信息
.none() 仅处理文本域信息

.single() 单文件上传

// .single(fieldname) 接受一个以 fieldname 命名的文件,文件信息保存在 req.file
// 如果上传的文件多于1个,或者上传的文件名与fieldname不匹配,将发生"LIMIT_UNEXPECTED_FILE"错误
// 不指定filedname,则 .single() 等效于 .none()
router.post("/upload/single",upload.single('afile'),function (req,res){
   
    let ret = {
   
        "text_field": req.body,
        "file_field": req.file	// req.file 是一个对象
    }
    res.send(ret);
})

上传1个文件,filename为afile
.single() 处理单个文件上传及文本域信息

.array() 多文件上传

// .array(fieldname[, maxCount]) 接受一个以 fieldname 命名的文件数组,maxCount 来限制上传的最大数量,文件信息保存在 req.files
// 如果上传的文件多于maxCount限定个数,或者上传了与fieldname不匹配的文件,将发生"LIMIT_UNEXPECTED_FILE"错误
// 不指定fieldname或maxCount=0,则与 .none()等效
router.post("/upload/array",upload.array("afile",2),function 
最低0.47元/天 解锁文章
上传文件multipart/form-data深入解析
weixin_34284188的博客
03-30 1万+
上传文件是一个前端常见的需求,但是为什么上传文件必须使用content-type:multipart/form-data作为请求头? 起源:multipart/form-data定义源头 multipart/form-data最初由 《RFC 1867: Form-based File Upload in HTML》文档提出。 Since file-upload is a feature tha...
Express中使用Multiparty进行文件上传及POST、GET参数获取
weixin_34249367的博客
11-16 809
Express 版本:4.14.1 在Express中,文件上传需要用到multiparty中间件,在项目目录中,通过npm install multiparty –save进行安装必要组件。 前端HTML代码,用于上传文件: <form action="/upload" method="post" enctype="multipart/form-data"> &l...
express-form-data:解析多部分数据的模块
05-01
表达形式数据 解析多部分/表单数据的模块。 基于 安装 npm install express-form-data 例子 const formData = require ( "express-form-data" ) ; const express = require ( "express" ) ; const os = require ( "os" ) ; const app = express ( ) ; /** * Options are the same as multiparty takes. * But there is a new option "autoClean" to clean all files in "uploadDir" folder after the response. * By default, it is "false". */ const
node:express解析multipart/form-data数据;上传文件(单文件+多文件)
本以为成功很简单,没想到活成普通人都需拼尽全力!
08-31 2923
文件上传的时候,我们会采用multipart/form-data请求体格式,而express.urlencoded()中间件并不能去解析此格式的数据,因此我们需要去找一个可以解析multipart/form-data格式的包,这里推荐使用multer,npm地址。...
Express web框架的 formdata插件
01-16
这个插件可以提供表单的数据转换/数据验证/数据模型 var FormData = require('form-data'); var formdata = new FormData(); // 表单数据验证 formdata.validat(字段名,验证器名或验证器, 验证器参数数组 , 错误信息); // 表单数据转换 formdata.convert(字段名,转换器名或转换器,错误信息); // 数据建模 schema formdata.schema([字段名1,字段名2....]); // 生成connect插件 formdata.build(); // return function(req,res,next) {...} 对象
基于expressform-data转发
sinat_37677339的博客
12-03 1144
基于expressform-data转发 问题:为解决跨域的问题,之前使用express框架在node层进行请求转发,在处理包含文件的form-data请求时,使用bodyParser无法获取到request.body及file 解决方法:npm install node-fetch connect-multiparty form-data -s node-fetch 转发请求到后台服务器,可以支持form-data connect-multiparty 一个可以解析form-dataexpress
nodejs express读取前端页面ajax发送的formData格式的方法
y5946的博客
04-27 9765
最近开始学习nodejs,很多东西都没弄懂,今天在学express,于是想做一个小demo,希望将前端的form表单,格式为formData的类型,通过ajax发送给express后端。在网上找了很多方法,大部分人都说用require('body-parser'),这个中间件来接收数据,但我的req.body总是为{},不知道为什么,真的很气人!最后我发现body-parser并不支持conten...
后端处理multipart/form-data
08-26
常见的后端框架,如Node.js中的Express、Python中的Django、Java中的Spring等,通常都提供了处理`multipart/form-data`请求的功能或插件。你可以根据自己的需求选择合适的工具来处理这种类型请求
后端处理multipart/form-data图片
最新发布
08-26
您可以使用以下步骤来处理multipart/form-data类型的图片上传: 1. 接收请求:在后端服务器上设置一个路由来接收包含图片的multipart/form-data请求。根据您正在使用的编程语言和框架,可以使用例如Express.js...
Express formdata插件
01-16
Express formdata插件 使用视频教程
express-multipart-file-parser:Express解析器,允许使用多部分数据上传文件,与Google Cloud功能兼容
05-01
快速多部分文件解析器 用于快递的解析器,允许使用多部分/表单数据上载文件 与Google Cloud Functions一起使用 用法 // default parser without destructuring const fileParser = require ( 'express-multipart-file-parser' ) . . . app . use ( fileParser ) . . . app . post ( '/file' , ( req , res ) => { const { fieldname , originalname , encoding , mimetype , buffer , } = req . files [ 0 ] . . . } ) 选项使用 // must use destructu
基于node.js依赖express解析post请求四种数据格式
01-02
node.js依赖express解析post请求四种数据格式 分别是这四种: www-form-urlencoded form-data application/json text/xml 1、www-form-urlencoded 这是http的post请求默认的数据格式,需要body-parser中间件的支持 服务器端的demo: var express = require('express'); var app = express(); var bodyParser = require('body-parser'); app.use(bodyParser.urle
multipart/form-data格式传数组
08-26
下面是一个使用Node.js和Multer库处理multipart/form-data格式传输数组数据的示例: ```javascript const express = require('express'); const multer = require('multer'); const app = express(); const upload...
express 接受enctype="multipart/form-data"文件和表单
黄彪博客
03-22 2760
文章目录文章参考安装 multerexpress接收前端传递的参数例子将文件上传到配置的目录中自定义上传文件到指定目录 文章参考 Multer npm Nodejs进阶:基于express+multer的文件上传 安装 multer npm install multer --save express接收前端传递的参数例子 将文件上传到配置的目录中 const express = requir...
如何用 express 接收文件 formdata js
学习笔记
08-15 4281
express是一个nodejs的后台框架,如何接收文件并存储文件呢。
express 解析post请求的数据格式
luckydog
04-08 1473
node.js依赖express解析post请求四种数据格式 分别是这四种: www-form-urlencoded form-data application/json text/xml 1、www-form-urlencoded 这是http的post请求默认的数据格式,需要body-parser中间件的支持 服务器端的demo: var express = require('express'); var app = express(); var bodyParser = require('body
Express 第三方中间件 multiparty ,Express 实现上传文件功能
bcbc86的博客
11-18 661
express的基础上使用第三方中间件 multiparty 实现文件上传功能。
node的express框架中使用Multer实现文件上传功能
jieyucx的博客
08-02 1417
/ req.file 是 'myfile' 文件 的信息 // req.body 将具有文本域数据,如果存在的话 res . send('文件上传成功!');})这个路由中的upload.single(‘myfile’), 'myfile’是我们在前端form表单中定义的name值,对应的文件的file对象添加到了req。file属性中。upload.single的作用是处理前端传过来的name为’myfile’的单个文件。而req.body属性则包含了非文件的表单数据。req.file对象。
写文章

热门文章

  • 推荐几个Windows iso镜像下载的网站 270182
  • 【Github】作为程序员不得不知道的几款Github加速神器 180408
  • Windows 下 Redis 安装与配置 教程 166535
  • MinGW-W64 下载、安装与配置(支持最新版的GCC,目前 GCC 13.2.0) 145965
  • Windows 打开cmd/dos窗口的12种方式(全网最全) 90144

分类专栏

  • MySQL 6篇
  • Windows 24篇
  • Batch 11篇
  • Docker 9篇
  • MSYS2 3篇
  • Cygwin 3篇
  • Redis 2篇
  • Linux 9篇
  • 杂项 17篇
  • C/C++ 1篇
  • MinGW-w64 1篇
  • YAML 1篇
  • NodeJs 8篇
  • Postman 1篇
  • JsonPath 1篇
  • PHP 1篇
  • JMeter
  • LoadRunner 1篇
  • HTTP 1篇
  • Python 16篇

最新评论

  • 推荐几个Windows iso镜像下载的网站

    Orion475: 可以下载,你把f12浏览器标识改成手机,再打开那个官方网址就可以下载了

  • 【Github】作为程序员不得不知道的几款Github加速神器

    qq_50761902: 搞笑了牢大,我能上去github我来这干啥?

  • 【Github】作为程序员不得不知道的几款Github加速神器

    m0_67638999: 给的地址都是失效的

  • 【Github】作为程序员不得不知道的几款Github加速神器

    EthicaDD: 我能连上github的话我还下fastgithub干啥

  • 【Github】作为程序员不得不知道的几款Github加速神器

    jinitaimei_123: 我连不上github,为什么让我去github下载github的加速器……

最新文章

  • 解决 SQLyog 连接 MySQL8.0+ 报错:错误号码2058
  • SQLyog 各版本下载与安装(目前最新版本为13.2.0)
  • 解决`SQLyog Trial`试用到期的问题(提供一个脚本解决方案)
2023年79篇
2021年2篇
2020年1篇
2019年2篇
2017年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小青龍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家苏州动物玻璃钢雕塑加工玻璃钢红军雕塑生产厂甘南玻璃钢植物雕塑制作酒桶玻璃钢卡通雕塑设计三水玻璃钢雕塑昆明玻璃钢卡通雕塑盐城蛋形玻璃钢花盆云南哪里有玻璃钢卡通雕塑佛像玻璃钢雕塑公司北京专业玻璃钢雕塑高品质的选择浅白色石漆玻璃钢花盆合作玻璃钢游乐场门头雕塑红色革命主题玻璃钢雕塑供应商玻璃钢雕塑标准生产工艺四川玻璃钢马雕塑制作过程江西多彩玻璃钢雕塑制作广东园林玻璃钢雕塑制作临颍玻璃钢雕塑济南玻璃钢仿铜雕塑罗源玻璃钢雕塑鹤壁玻璃钢智能雕塑商场美陈演讲重庆玻璃钢卡通雕塑规格景观玻璃钢雕塑厂家工厂无锡蓝色玻璃钢花盆邢台玻璃钢仿铜雕塑嘉兴玻璃钢马雕塑江苏特色商场美陈厂家直销新蔡玻璃钢雕塑加工厂家漳州手糊法玻璃钢雕塑设计香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化