2013-03-12 45 views
0

我正在寫一個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

回答

0

看看RFC 2616。有關如何確定消息長度,請參閱section 4.4。關於如何實施multipart/form-data,請參閱RFC 2388

真正的答案是:不要重新發明輪子,否則你將不得不重新插入幾百頁的RFC。那裏有大量的圖書館和服務器。

如果你確實想編寫自己的web服務器,例如作爲一個練習,你會發現這些RFC已經是了,對嗎?