第三方图书馆" node-formidable"并且"表达"能够处理多部分POST请求(例如,使用文件上传表单),但我不想使用任何第三方代码。如何在Node.js上的纯JavaScript中进行文件上载过程?
在这方面资源非常少。如何才能做到这一点?谢谢,爱情。
答案 0 :(得分:2)
只是为了澄清,因为似乎有些人对另一个答案没有多大帮助感到愤怒:没有简单的方法可以做到这一点,而不依赖于图书馆为你做这件事。
首先,这里是另一个问题的答案,试图澄清POST文件上传时发生的事情:https://stackoverflow.com/a/8660740/2071242
总而言之,要解析此类上传,您首先需要检查包含" multipart / form-data"的内容类型标头。并且,如果存在,则读取标题内的边界属性。
在此之后,内容分为多个部分,每个部分以边界字符串开头,包括一些额外的标题,然后是空白行后的数据本身。只要在上传的数据中不存在这样的字节序列,浏览器就可以非常自由地选择边界字符串(详见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--
注意在初始标题之后,如何将两个破折号添加到每个边界字符串的开头,并将两个破折号添加到最后一个字符串的末尾。
现在,令人困难的是你可能需要在几个块中读取传入数据(在上面提到的回调函数中),并且不能保证边界将包含在一个块中。因此,您需要缓冲所有数据(不一定是个好主意)或实现逐字节遍历数据的状态机解析器。这实际上正是formidable library is doing。
因此,经过类似的考虑后,我个人决定要使用的是库。重新实现这样的解析器非常容易出错,在我看来不值得努力。但是如果你真的想避免使用任何库,那么检查强大的代码可能是一个好的开始。
答案 1 :(得分:1)
这是一个有点老的问题,但仍然很相关。
我一直在寻找类似的解决方案,但没有运气。所以决定做我自己的,这可能对其他一些用户有用。
要点:https://gist.github.com/patrikbego/6b80c6cfaf4f4e6c119560e919409bb2
Nodejs 本身推荐(见here)formidable,但我认为这样的基本功能应该由 Nodejs 开箱即用提供。
答案 2 :(得分:0)
如果您不想非常使用任何模块,我认为您需要自己解析表单。上传文件时,表单将采用multipart/form-data
格式,这意味着您的请求内容将被浏览器随机生成的字符串除。您需要在表单的开头读取此字符串,尝试加载数据并找到此字符串,然后逐个解析它们。
有关multipart/form-data
的详情,请参阅http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
我认为最好的解决方案是使用formidable
。它处理不同的场景,我认为它是完美的。