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

Bin*_*hen 2 c c++ post actionscript http

我使用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--
Run Code Online (Sandbox Code Playgroud)

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

bob*_*nce 5

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

要解析的multipart/form-data的形式提交你足够的MIME解析器解析头,挑出你要喜欢的参数boundaryname,并通过边界字符串分割收到的消息.这并非完全无关紧要,因此您可能需要考虑现有的库.

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