HTTP解析并保存 FormData 的二进制文件

我想同时上传多个图片文件,那就要用 FormData去上传对吧?
然后服务器(这里用node.js)解析读取到的数据,(估计)是某种协议来保存这些数据(----*** 作为分隔符,Content-** 数据/文件元信息,连续两个换行符[\r\n\r\n] 下面就是数据)

-----------------------------84099548324121656403635886376
Content-Disposition: form-data; name="uid"

372716830
-----------------------------84099548324121656403635886376
Content-Disposition: form-data; name="image-1"; filename="Screen Shot 2020-06-23 at 4.48.16 PM.png"
Content-Type: image/png

�PNG


IHDRt>��F ......(省略)
"

写几行简单的代码(依赖正则表达式)可以解析到数据,但就是 图片(文件) 数据不行
我估计是因为我为了解析这些数据由Binary转换为String,所以图片的二进制格式也被转换了,但是又不能100%复原回去?
网上搜基本都是用node.js的某个框架(今下午突然我的VPN都用不了了,访问不到Google,(只能Baidu/Bing)所以没搜到…)
请教下原理~~

获取http上传文件的信息,我是用的php的$_FILES超全局变量就全部取到了(nodejs尝试了几次都放弃了),然后把上传的文件从临时目录转移到指定目录,楼主是自己写代码解析http协议吗,感觉好厉害

试一试啊,也不算特别复杂的东西啊,以前莫名其妙为什么叫 HTTP “协议”,其实就是约定好数据格式,怎么去解析,所以现在想了解下“协议” 的详情细节啊

你需要的是这个

另外如果是二进制数据,chunk的类型是buffer,不要转成字符串,直接存成文件就可以了

但是我上传的好多个字段好多个文件啊,都会在同一个buffer里,

这个buffer怎么解析?

我想探究下底层原理啊,所以我想试试不用第三方库
最后我还是用了 Hunchentoot… 直接就瓜分好了文件啊

其实很简单,从http header里面获取boundary,然后按boundary把http的body分割成part, 每个part的header获取文件信息,每个part的body保存成文件

试了啊 问题是保存到的图片(jpg)不能正常打开(对比了下上传的问价,大小也有相差10几KB)