我虽然知道,文件上传的一般过程,即在页面表单中加入属性:enctype=multipart/form-data
,然后通过 <input type=file> 来选择文件,即可提交文件到指定服务器。在此过程中,提交的表单会与一般post有所不同,http主体大概是:
Content-Type: multipart/form-data; boundary=---------------------------14579331036932498511351460782
Content-Length: 418
-----------------------------14579331036932498511351460782
Content-Disposition: form-data; name="userfile1"; filename="å¤æ³¨è¯´æ.txt"
Content-Type: text/plain
1.±ê×¢ÒÔiPhone6s ÆÁÄ»³ß´çΪ±ê×¼£»
2.Èç¹ûÐèÒª²»Í¬³ß´çµÄicon£¬ÔÙ¸øÎÒ˵¡£
-----------------------------14579331036932498511351460782
Content-Disposition: form-data; name="hehe"
tewtw
-----------------------------14579331036932498511351460782--
在这里,我想探寻的是,服务器端如何接受数据流,并将数据流作为文件保存起来,也就是说从http的层面来说,如何操作这一切?而我搜索到的资料、博客多是从语言层面来解释,而语言之间多是直接做好了封装,如PHP中的$_FILES,node中多是引用formidable,直接一步到位,而未能解释里面的原理。
不知有大神能否指点一二?
话说PHP里面确实是语言层面已经都做好了你没法看,但是node.js里面你可以直接看源代码的呀:
比如
busboy
中lib/types/multipart.js
,又如
formidable
中lib/multipart_parser.js
而上传文件的协议标准上面已经有人说了,见 RFC 7578