之前几天写过一个http chunk传输的实现,这个主要是用来给服务器下发文件用的。今天介绍的HttpMultiPart主要是用来给客户端上传文件的。个人刚刚接触服务器,不了解是否还有其他方法上传文件,只找到MultiPart这个方法,所以就先实现这个功能再说。先来看一下MultiPart传输的格式:
//--------WebKitFormBoundaryrGKCBY7qhFd3TrwA =>--boundary
//Content-Disposition: form-data;name="text"
//
//title
//--------WebKitFormBoundaryrGKCBY7qhFd3TrwA
//Content-Disposition: form-data;name="file";filename="chrome.png"
//Content-Type: image/png
//PNG ..... content of chrome.png .....
//--------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
1.------WebKitFormBoundaryrGKCBY7qhFd3TrwA这个是boundary,通过Http的Content-Type头会传输一个boundary=xxxx的数据。xxx就是------WebKitFormBoundaryrGKCBY7qhFd3TrwA。boudary标示了一段数据的开始。
2.Content-Disposition标示的是这段数据的属性,一般我们关注的就是name。接下来就是这段数据。
3.文件的传输需要有一个Content-Type来标示文件类型。接下来就是文件数据。
4.--------WebKitFormBoundaryrGKCBY7qhFd3TrwA--标示multipart数据结束。
由于http协议文本协议,所以我们解析的时候需要逐个字符检测,非常耗时。但是也没找到什么好方法。 暂时先凑活着干把。
Obotcha解析MultiPart的代码主要集中在:
https://github.com/wangsun1983/Obotcha/blob/master/net/http/HttpMultiPartParser.cpp
的HttpMultiPart _HttpMultiPartParser::parse(ByteRingArrayReader reader)中。
由于是纯文本解析,比较简单。这里就不啰嗦了。
哈哈。