我们使用 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 格式的请求相关推荐

  1. meetup_如何使用标准库和Node.js构建Meetup Slack机器人

    meetup by Janeth Ledezma 简妮丝·莱德兹玛(Janeth Ledezma) 如何使用标准库和Node.js构建Meetup Slack机器人 (How to build a M ...

  2. 在 Chrome 开发者工具中调试 node.js

    命令行工具 devtool ,它可以在 Chrome 的开发者工具中运行 Node.js 程序. 下面的记录显示了在一个 HTTP 服务器中设置断点的情况. 该工具基于 Electron 将 Node ...

  3. 【使用 node 版本切换工具 nvm 切换 node.js 版本】

    使用 node 版本切换工具 nvm 切换 node.js 版本 文章目录 使用 node 版本切换工具 nvm 切换 node.js 版本 前言 一.nvm是什么? 二.使用步骤 1.卸载原有 no ...

  4. 狼叔直播 Reaction《学习指北:Node.js 2022 全解析》

    大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan02 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  5. Node.js:项目中的 package.json 格式

    1. node.js 项目包下的 package.json : 实例: {"name" : "chatroooms","version" : ...

  6. 哪个websocket库与Node.js一起使用? [关闭]

    本文翻译自:Which websocket library to use with Node.js? [closed] Currently there is a plethora of websock ...

  7. 2021-09-11 consolidate 模板引擎整合库,Node.js 中 __dirname 和 ./ 的区别

    consolidate 模板引擎整合库[适配] npm install consolidate 在工作路径的views目录下,新建1.ejs <!DOCTYPE html> <htm ...

  8. 一款基于VUE的在线绘制流程图工具安装使用node.js

    1.安装node.js 下载地址:https://nodejs.org/en/download/ 安装一下三项,并检查是否成功: node -v npm -v vue -V(大写的V) 一款基于VUE ...

  9. Node.js 使用 express-jwt 解析 JWT

    Node.js 上 Token 鉴权常用的是 passport,它可以自定义校验策略,但如果你是用 express 框架,又只是解析 JWT 这种简单需求,可以尝试下 express-jwt 这个中间 ...

最新文章

  1. 零基础入门学习python(24)-字典(2):字典的内置方法
  2. ARC在Release与Debug模式中内存释放的坑
  3. php 类加载其它类,php 类自动载入的方法
  4. 使用Martix来实现缩放图片的功能
  5. html判断表单是否为空,layui判断表单是否为空
  6. 国家文物局:长城沿线群众是文物保护的重要力量
  7. C++ 覆盖方法、重载方法的理解
  8. 利用 Webpack 实现小程序多项目管理
  9. 对 cloudwu 简单的 cstring 进行简单解析
  10. 文本框获取焦点并弹出下拉框
  11. 安装配置Tomcat7教程
  12. 10个SQL注入工具
  13. mysql查询 多门课程的平均成绩_数据库学生成绩分析问题.doc
  14. 酷家乐的 Istio 与 Knative 实践
  15. 线控红外探测器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. C语言判断字符是否为数字 如果是输出yes 如果为字母 则大写转换小写 小写转换大写
  17. 如何以软文宣传的方式成功推广洗发水的新产品上市?
  18. 抖音测试图文内容一级流量入口
  19. Fiddler报文分析-断点应用、模拟网络限速-HTTPS的 拦截
  20. DPI、PPI、DP、PX 的详细计算方法及算法来源是什么

热门文章

  1. sqlserver 还原出错
  2. 适合大学生的笔记软件评测:云笔记.离线笔记、手写笔记、写作软件
  3. OSPF协议总结8(选路原则)
  4. 普维六类非屏蔽智能LED模块化布线解决方案(普维综合布线)
  5. 实验七 连续信号的采样与恢复
  6. 今天是是“半边天”们的专属节日
  7. [分布式id]:Leaf——美团点评分布式ID生成系统
  8. [FlareOn5]FLEGGO 题解
  9. 从分布式系统的设计理念说起
  10. Linux学习-计算机基础