如何从多部分Http请求中提取数据?

问题描述:

我正在写一个HTTP Web服务器。我的服务器必须处理Http多部分请求。在我以前的实现中,我是在请求的每个部分中都有内容长度头的帮助下提取数据的。我使用的客户端为多部分请求中的每个零件部分(文件)提供内容长度标题。如何从多部分Http请求中提取数据?

但是,另一个客户端没有给每个文件的内容长度。在我的实现中,我使用content-length头来提取那么多字节并将它们保存到一个文件中。

请告诉我现在如何提取数据。

其中我现在越来越标头是:

POST xxxxxxxxxxxxxxxxxxxxxxx&currentTab=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-- 

在该请求中,现在有内容长度报头部分的数据。

编辑:

此客户端早些时候用来在每一个部分发送内容长度报头。但由于某种原因,它不再发送它。任何人都可以为此提出任何理由。如果你想实现一个HTTP/1.1服务器

感谢

+0

你尝试HttpContext.Current.Request.Files [0] .InputStream读文件输入; ? – Popeye 2013-03-12 09:14:05

+0

我没有使用任何C#类..我从套接字获取原始数据,我必须解析。 – vijay053 2013-03-12 09:16:25

看看RFC 2616。有关如何确定消息长度,请参阅section 4.4。关于如何实施multipart/form-data,请参阅RFC 2388

真正的答案是:不要重新发明*,否则你将不得不重新插入几百页的RFC。那里有大量的图书馆和服务器。

如果你确实想编写自己的web服务器,例如作为一个练习,你会发现这些RFC已经是了,对吗?

像这样:从一个多部分/格式数据POST

Reading file input from a multipart/form-data POST