如何解析HTTP POST(文件上传)流?

我使用actionscript引擎上传文件,引擎将选择文件并通过网络通过HTTP POST命令发送文件,该文件说POST消息如下:

POST /handler.cfm HTTP/1.1 Accept: text/* Content-Type: multipart/form-data; boundary=----------Ij5ae0ae0KM7GI3KM7ei4cH2ei4gL6 User-Agent: Shockwave Flash Host: www.example.com Content-Length: 421 Connection: Keep-Alive Cache-Control: no-cache ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="Filename" MyFile.jpg ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="photo"; filename="MyFile.jpg" Content-Type: application/octet-stream FileDataHere ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="Upload" Submit Query ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7-- 

在服务器端,我有一个C ++程序侦听端口80并解析POST消息。 我只想要文件名和文件数据。 如何使用c ++解码文件数据,它是base64编码的,是否有一个库可以为我做? 我想解码二进制文件,并将其写入文件,谢谢!

不,没有编码。 多部分消息的每个子部分的主体包括在逐字节字节中。 因此,您必须小心选择不会出现在文件数据中任何位置的boundary字符串。

要解析多部分/表单数据表单提交,您将有足够的MIME解析器来解析标题,选择您想要的参数(如boundaryname ,并通过边界字符串拆分接收的消息。 这并非完全无关紧要,因此您可能需要考虑现有的库 。

(不幸的是,HTTP中的浏览器实际上与RFC 1341中列出的标准MIME规则略有不同 。特别是,字段名称和文件名参数往往包含非ASCII字符和未转义的引号。但是如果您自己生成POST你可以避开这些争论领域。)

在没有“Content_Transfer_Encoding”标头的情况下,假设数据以“7bit”( RFC 1521 ; RFC 1867 ; RFC 2616 )编码。

我不知道tere是一个解析/解码HTTP POST的C库。 我很确定有但是:)

Interesting Posts