Multiparty是用来解析FormData数据的一款插件,还有一款与之功能相同的插件,叫Formidable。没有使用过这款插件,这里就不多说了,只是简单的提一下。接下来继续说Multiparty。先提供下官方API链接:ClickHere。英文版的,英语好的可以去看一下。
使用Multiparty这款插件,首先需要安装:npm install multipary。然后引用该插件,并实例化插件:。插件的构造函数接收一个对象作为参数,参数是可选的,可以不不穿。参数的属性有:encoding:formdata的数据设置编码,默认是utf-8。 maxFieldsSize:限制字段,按字节分配的内存量,默认是2M,超出则会产生错误。 maxFields:限制被解析字段的数量,默认为1000。maxFilesSize:此属性只有在autoFiles为true的时候生效,设置上传文件接收字节的最大数量。也就是限制最大能上传多大的文件。autoFields:启用字段事件,并禁用字段的部分时间。如果监听字段事件,该属性自动为true。 autoFiles:启用文件事件,并禁用部分文件事件,如果监听文件事件,则默认为true。uploadDir:放置文件的目录,只有autoFiels为true是有用。
实例化完构造函数后,开始正式解析FormData数据。利用parse()方法来解析。方法接收两个参数,无返回值。第一个参数为request对象,把创建服务时,回掉函数中的第一个参数传进去就可以。第二个参数是cb,一个回掉函数,通过该回掉函数,可以获取到解析后的数据。如果你是上传文件,使用这个回调函数的话。那我可以很荣幸的告诉你,你不需要在执行写入文件的工作了,因为插件已经完成了。你只需要设置好uploadDir属性,然后做些后续操作就可以了。因为回掉函数会默认开启autoFields和autoFlies。个人感觉应该是内部监听field和file事件。继续说回调函数,它有三个参数,第一个参数是err,第二个参数是fields,第三个参数是flies。err是发生错误时,返回的异常信息。fields是一个对象,存储着FormData里的字段信息。files存储的是文件信息。如果你把整个file对象直接放进formData内,则有值,否则为空对象。假如你想自己写文件的话,这个回调函数完全可以忽略掉。
那自己写文件,如何写呢?众所周知,nodejs是靠事件驱动的,它通过事件来实现异步编程,来达到其它后台语言多线程的效果。作为基于nodejs实现的插件,事件肯定是必不可少的,而它提供的这些事件,提供了自己写文件的通道。
part事件,之所以先说这个事件,因为它是实现自己写文件的关键。该事件会在请求中遇到文件数据时触发,它的回调函数是一个实现可读流的实例对象。对象提供的属性有headers:存储着请求的头部信息。name:字段名称。filename:文件名称。byteFffset:这部分数据,在主体数据中的字节偏移量。byteCount:数据总的字节长度。注意使用part事件时,不要再去监听fields和files事件。如果监听了的话,那在part事件中,你将得不到你想要的数据。
这是一段写文件的代码仅供参考。
aborted事件会在请求中止时触发。
close事件会在请求结束之后触发。
file事件,如果发送的是文件,则可以监听该事件。监听此事件,插件会把文件写到磁盘上,在利用回调返回相关信息。参数一name:字段名称。参数二file:存储着文件信息的对象。属性有:fieldName:字段名称。originalFilename:文件名称。path:写到磁盘上文件的具体路径。headers:存储着头部信息。size:文件具体大小。
field事件,监听此事件,可以获取到请求中的具体数据。回调函数两个参数。name:字段名。value:字段值。
这些就是multiparty插件的一些api的介绍,有写的不对的地方,还请大神指正。