multiparty node.js的中间件 --- 上传文件

multiparty 

一、简介

1. 作用
解析Content-Type multipart/form-data的HTTP请求,也被称为文件上传。

2.特点
node.js版本 V0.10+ 都支持;
这个模块不会创建临时文件,除非我们需要才创建临时文件;

3. 安装
npm install multiparty --save

二、来个实例上手

第一步:
html 的结构
<form action="/upload" enctype="multipart/form-data" method="post">
   <input type="text" name="title" />
   <input type="file" name="upload" multiple="multiple" />
   <input type="submit" value="Upload" />
</form>
注意:上传文件的html必须具备的三个条件(缺一不可)
1.form表单
2.action 设置表单提交的接口
3.enctype 设置表单提交的数据类型  multipart/form-data

第二步:
node.js 的 服务请求
引入模块:
var multiparty = require('multiparty');  /*引入multiparty模块*/
var http = require('http');/*引入http模块*/
var utip = require('util');      /*引入 util模块 --- node.js的工具模块,主要支持node.js的内部API的需求*/
创建http服务:
http.createServer(function(req, res){
    /*res对象 在http服务器内部被创建。它作为第二个参数被传入 ‘request’事件(即创建http服务createServer的回调函数) */
    if(req.url === '/upload' && req.method === 'post'){
        /*multipart的语法*/
        var form = new multiparty.Form();  /*创建form表单对象的实例*/
        form.parse(req, function(err, fields, files){
             res.writeHead(200, {'content-type': 'text/plain'});
             /*发送一个响应头给请求。该方法在消息中只能被调用一次,且必须在res.end()被调用前调用。*/
             res.end(util.inspect({
                 fields: fields, 
                 files: files
             })); 
             /*util.inspect() 返回 object的字符串表示, 主要用于调试*/
        });
   }
}).listen(8080); /*设置 8080端口监听*/

三、API

1. 创建multiparty的对象实例
var form =new multiparty.Form(options);
2.options-- 选项
  • A、encoding:  设置form表单传入的字段属性、属性值得编码。默认 utf8。
  • B、maxFieldsSize:  设置整个form表单字段(非files)的限制的最大字节数(bytes)。如果大于该值,则会触发 error事件。默认值为 2MB。
  • C、maxFields:  设置(限制)整个form表单的字段的最大数量。这种情况下,files作为fields(字段)个数算。默认值为 1000.
  • D、maxFilesSize:  设置所有files的总字节数的最大值(只有当autoFiles设置为true时有效)。超出该值,则会触发error事件。默认值为  Infinity。
  • E、autoFields:  启动field events和禁用part events。如果添加field的监听,则默认设置为true.
  • F、autoFiles:  添加file监听,默认设置为true。
  • G、uploadDir:  只有当autoFiles设置为true时有效。上传文件的文件放置目录的设置。可通过使用fs.rename() 重命名再进行移动。默认值为 os.tmpdir()。
注意: 
os.tmpdir() 方法返回一个字符串,表明操作系统的默认临时文件目录。
fs.rename() 需要引入 fs模块,第一个参数为 oldPath,第二个参数为newPath, 第三个参数为 回调函数 callback.

3.form.parse(req, [callback])
作用: 该方法用于解析node.js的服务请求的包含的form表单数据。
req: node.js的服务请求的 form表单的数据
如果callback提供,autoFields、autoFiles设置为true,所有的fileds和files都被收集并传递给callback作为参数,那么就不需要form 的任何监听事件。
callback的第一个参数为 err(抛出错误)
callback的第二个参数为 fields(收集的键值对【字段属性值的类型为数组】)
callback的第三个参数为 files(收集的文件【上传的文件】)
实例Demo:
form.parse(req, function(err, fields, files){
	Object.keys(fields).forEach(function(name){
	/*
		Object.keys() 返回一个给定对象的所有可枚举属性的字符串数组。
		数组中属性名的排列顺序和使用 for...in循环遍历给定的对象返回的顺序一致(两者的主要区别是 for...in 还会枚举原型链上的属性)
	*/

	/*
		forEach( callback, thisValue) 调用数组的每个元素,并将元素传递给回调函数。
		callback回调函数的三个参数:
		currentValue: 必需。当前元素
		index: 可选。 当前元素的索引值
		arr: 可选。当前元素所属的数组对象
		thisValue: 可选。
	*/
	})
})








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值