如何使用 multiparty 工具库在 Node.js 应用里解析 multipart form-data 格式的请求
我们使用 form 和 input 控件上传文件到服务器,服务器采取 Node.js 应用接收客户端上传的文件。可以使用 multiparty
这个库文件,解析从客户端提交的本地文件。完整的源代码如下图所示:
var multiparty = require('multiparty');
var http = require('http');
var util = require('util');
const PORT = 3003;http.createServer(function(req, res) {if (req.url === '/upload' && req.method === 'POST') {// parse a file uploadvar form = new multiparty.Form();form.parse(req, function(err, fields, files) {res.writeHead(200, { 'content-type': 'text/plain' });res.write('received upload:\n\n');res.end(util.inspect({ fields: fields, files: files }));});return;}// show a file upload formres.writeHead(200, { 'content-type': 'text/html' });res.end('<form action="/upload" enctype="multipart/form-data" method="post">'+'<input type="text" name="title"><br>'+'<input type="file" name="upload" multiple="multiple"><br>'+'<input type="submit" value="upload your file">'+'</form>');
}).listen(PORT);console.log('listen on port:' + PORT);
文件上传的具体实现:
使用 HTML 标准的 form 标签,action 值为 /upload
, 这个值在 Node.js 应用里会再次用到。
enctype 为 multipart/form-data
:
使用 input
控件,属性指定为 file
,multiple 属性为 multiple
,以支持多文件上传。
一旦我在浏览器里输入 http://localhost:3003/ 之后,下列断点就触发:提示有新的客户端连接到达:
此时 createServer
里的回调函数,req 的类型为 IncomingMessage,url 字段的值为 /
:
此时返回一个文件上传的网页给客户端:
如下图所示:
选中两个文件后,点击 Upload your files
:
此时 url 变成了 form 里指定的 /upload
,method 变成了 POST:
执行 form.parse
注册回调函数。注意,此时这个回调函数并不会立即执行。
稍后,当两个本地文件的数据流都完整上传到服务器之后,注册的回调函数以异步的方式被触发:
在此回调函数里,req 对象不再可用,只能访问 res(ServerResponse), error, fields, files 这种字段:
我们在 title 字段输入 Jerry 123
之后,点击 upload 按钮:
可以从 fields 字段获得 title 内容,从 files 字段获取上传的文件的文件名和尺寸,以及本地的绝对路径:
如何使用 multiparty 工具库在 Node.js 应用里解析 multipart form-data 格式的请求相关推荐
- meetup_如何使用标准库和Node.js构建Meetup Slack机器人
meetup by Janeth Ledezma 简妮丝·莱德兹玛(Janeth Ledezma) 如何使用标准库和Node.js构建Meetup Slack机器人 (How to build a M ...
- 在 Chrome 开发者工具中调试 node.js
命令行工具 devtool ,它可以在 Chrome 的开发者工具中运行 Node.js 程序. 下面的记录显示了在一个 HTTP 服务器中设置断点的情况. 该工具基于 Electron 将 Node ...
- 【使用 node 版本切换工具 nvm 切换 node.js 版本】
使用 node 版本切换工具 nvm 切换 node.js 版本 文章目录 使用 node 版本切换工具 nvm 切换 node.js 版本 前言 一.nvm是什么? 二.使用步骤 1.卸载原有 no ...
- 狼叔直播 Reaction《学习指北:Node.js 2022 全解析》
大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan02 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...
- Node.js:项目中的 package.json 格式
1. node.js 项目包下的 package.json : 实例: {"name" : "chatroooms","version" : ...
- 哪个websocket库与Node.js一起使用? [关闭]
本文翻译自:Which websocket library to use with Node.js? [closed] Currently there is a plethora of websock ...
- 2021-09-11 consolidate 模板引擎整合库,Node.js 中 __dirname 和 ./ 的区别
consolidate 模板引擎整合库[适配] npm install consolidate 在工作路径的views目录下,新建1.ejs <!DOCTYPE html> <htm ...
- 一款基于VUE的在线绘制流程图工具安装使用node.js
1.安装node.js 下载地址:https://nodejs.org/en/download/ 安装一下三项,并检查是否成功: node -v npm -v vue -V(大写的V) 一款基于VUE ...
- Node.js 使用 express-jwt 解析 JWT
Node.js 上 Token 鉴权常用的是 passport,它可以自定义校验策略,但如果你是用 express 框架,又只是解析 JWT 这种简单需求,可以尝试下 express-jwt 这个中间 ...
最新文章
- 零基础入门学习python(24)-字典(2):字典的内置方法
- ARC在Release与Debug模式中内存释放的坑
- php 类加载其它类,php 类自动载入的方法
- 使用Martix来实现缩放图片的功能
- html判断表单是否为空,layui判断表单是否为空
- 国家文物局:长城沿线群众是文物保护的重要力量
- C++ 覆盖方法、重载方法的理解
- 利用 Webpack 实现小程序多项目管理
- 对 cloudwu 简单的 cstring 进行简单解析
- 文本框获取焦点并弹出下拉框
- 安装配置Tomcat7教程
- 10个SQL注入工具
- mysql查询 多门课程的平均成绩_数据库学生成绩分析问题.doc
- 酷家乐的 Istio 与 Knative 实践
- 线控红外探测器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- C语言判断字符是否为数字 如果是输出yes 如果为字母 则大写转换小写 小写转换大写
- 如何以软文宣传的方式成功推广洗发水的新产品上市?
- 抖音测试图文内容一级流量入口
- Fiddler报文分析-断点应用、模拟网络限速-HTTPS的 拦截
- DPI、PPI、DP、PX 的详细计算方法及算法来源是什么