通过http接收二进制数据

时间:2011-03-11 12:34:32

标签: c++ http

我目前正在处理一台服务器,它将接收从客户端上传的图像。客户端可以通过http表单发送图像,如下所示。

 <form method="post" action="http://localhost:7074" enctype="multipart/form-data">
 <input type="file" name="myfile">
 <input type="submit">
 </form>

在我的服务器端,我按照beej教程创建套接字并监听连接。从客户端上传图像后,这是我的服务器从缓冲区读取的内容:

POST / HTTP/1.1
Host: localhost:7074
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.15) Gecko/20110303 Ubuntu/10.10 (maverick) Firefox/3.6.15
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------13305569846927610321194789130
Content-Length: 3273

-----------------------------13305569846927610321194789130
Content-Disposition: form-data; name="myfile"; filename="0-adidas-logo.jpg"
Content-Type: image/jpeg

����

根据收到的数据,我假设开头部分是http标题,我的图像的实际二进制数据位于“Content-Type:image / jpeg”行之后。所以我将其余的buf打印到一个文件并将其保存为jpeg文件,但是当我打开它时,我收到错误“在201状态下对jpeg库的错误调用。所以我想知道是否有任何问题我之前提到过的步骤,因为我在这个阶段已经有很长一段时间了。

1 个答案:

答案 0 :(得分:0)

引用您的http响应,

'form-data'边界标题以\ r \ n结尾 此后的数据是你的二进制数据。

二进制数据以' - '

结尾的'boundary'的下一个出现结束

例如:

-----------------------------13305569846927610321194789130--

数据大小是从\ r \ n到边界之前的最后一个字节的所有内容。

其他的事实是Post的http标头有内容大小。适用于所有内容,包括多部分部分。

在此处阅读有关处理表单数据的更多信息(请参见3.3使用multipart / form-data):

http://www.ietf.org/rfc/rfc1867.txt

和内容处理

http://www.ietf.org/rfc/rfc2183.txt