我正在写一个HTTP web服务器。我的服务器必须处理Http多部分请求。在我之前的实现中,我在请求的每个部分中都使用内容长度报头来提取数据。我正在使用的客户端在多部分请求中给出每个部分(文件)的内容长度头。
但是另一个客户端没有给出每个文件的内容长度。在我的实现中,我使用内容长度头来提取那么多字节并将它们保存到一个文件中。
请告诉我现在如何提取数据。
我现在得到的头是:
POST xxxxxxxxxxxxxxxxxxxxxxx¤tTab=PHOTOxxxxxxxxxxxxxxxx HTTP/1.1
Content-Length: 6829
Content-Type: multipart/form-data; boundary=SnlCg9JqTpQIl6t_mPzByTjZ8bD24kUj; charset=UTF-8
Host: host
Connection: Keep-Alive
User-Agent: Apache-HttpClient/xxxxxxxx
Accept-Encoding: gzip
--SnlCg9JqTpQIl6t_mPzByTjZ8bD24kUj
Content-Disposition: form-data; name="file"; filename="imagesCA5L2CL6_jpg(2)_jpg.jpg"
Content-Type: photo/jpg
**Some Data byte array**
--SnlCg9JqTpQIl6t_mPzByTjZ8bD24kUj--
在这个请求中,部分数据中现在有内容长度的头。
编辑:早先这个客户端使用在每个部分发送内容长度头。但由于某种原因,它不再发送了。有谁能提出任何原因吗?
谢谢
像这样:从multipart/form-data POST读取文件输入
从multipart/form-data POST中读取文件输入
如果你想实现HTTP/1.1服务器,请查看RFC 2616。参见4.4节如何确定消息长度。关于如何实现multipart/form-data
,请参见RFC 2388。
真正的答案是:不要重新发明轮子,否则你将不得不重新实现几百页的RFC。这里有无数的库和服务器。
如果你想写自己的web服务器,例如作为练习,你应该已经找到了那些RFC,对吧?