第三方库“node-formidable”和“express”具有处理多部分POST请求的能力(例如,使用文件上载表单),但我不想使用任何第三方代码.如何在Node.js上使用纯
JavaScript进行文件上载过程?
在这方面资源很少.如何才能做到这一点?谢谢,爱是.
解决方法
只是为了澄清,因为似乎有些人生气,另一个答案没有多大帮助:没有简单的方法可以做到这一点,而不依赖于图书馆为你做这件事.
首先,这里是另一个问题的答案,试图澄清POST文件上传时会发生什么:https://stackoverflow.com/a/8660740/2071242
总而言之,要解析这样的上传,您首先需要检查包含“multipart / form-data”的Content-Type标头,如果存在,则读取标头内的boundary属性.
在此之后,内容分为多个部分,每个部分以边界字符串开头,包括一些额外的标题,然后是空白行后的数据本身.只要上传的数据中不存在这样的字节序列,浏览器就可以非常自由地选择边界字符串(详见http://tools.ietf.org/html/rfc1867的规范).您可以通过为请求对象的数据事件注册回调函数来读入数据:request.on(‘data’,callback);
例如,对于边界“QweRTy”,上传可能如下所示:
POST /upload HTTP/1.1 (some standard HTTP headers) Content-Type: multipart/form-data; boundary=QweRTy --QweRTy Content-disposition: form-data; name="upload"; filename="my_file.txt" Content-Type: text/plain (The contents of the file) --QweRTy--
请注意在初始标题之后如何将两个破折号添加到每个边界字符串的开头,并将两个破折号添加到最后一个的末尾.
现在,令人困难的是你可能需要在几个块中读取传入的数据(在上面提到的回调函数中),并且不能保证边界将包含在一个块中.因此,您需要缓冲所有数据(不一定是个好主意)或实现逐字节遍历数据的状态机解析器.这实际上正是07002.
因此,经过类似的考虑,我个人决定要使用的是库.重新实现这样的解析器非常容易出错,在我看来不值得努力.但是如果你真的想避免使用任何库,那么检查强大的代码可能是一个好的开始.