1
我目前正在从服务器上接收从客户端上传的图像。客户端可以通过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库。所以我想知道是否有任何问题我早先提到的,因为我在这个阶段打了一段时间的步骤。
请添加代码有人能帮你。 是否按照http头中收到的Content-Length字段保存到文件中(通常文件不是一次全部发送,而是分成几个包)? – 2011-03-11 13:14:03
需要注意的一件事是HTTP标头以\ r \ n结尾。确保你没有将\ n或\ r \ n写入jpeg。 – 2011-03-11 14:48:23
我强烈建议你使用库来做到这一点,而不是写你自己的。 – Ben 2011-04-02 06:49:47