0

背景 - 我試圖在C#中使用HttpWebRequest/HttpWebResponse將現有網頁流式傳輸到單獨的Web應用程序。我引人注目的一個問題是,我試圖使用文件下載的內容長度設置文件上傳請求的內容長度,但是問題似乎是當源網頁位於Web服務器上時,HttpWebResponse沒有提供內容長度。從源自其他web文件的HttpWebRequest上傳獲取responseLength以在源未實現ContentLength時流入上載?

HttpWebRequest downloadRequest = WebRequest.Create(new Uri("downloaduri")) as HttpWebRequest; 
using (HttpWebResponse downloadResponse = downloadRequest.GetResponse() as HttpWebResponse) 
{ 
    var uploadRequest = (HttpWebRequest) WebRequest.Create(new Uri("uripath")); 
    uploadRequest.Method = "POST"; 
    uploadRequest.ContentLength = downloadResponse.ContentLength; // #### 

問題:我怎麼會更新這個方法,以應付這種情況下(在下載響應不具有內容長度集)。它會以某種方式使用MemoryStream嗎?任何示例代碼將不勝感激。

回答

1

如果您很樂意從其他Web服務器完全下載響應,那確實會讓生活更輕鬆。從第一個Web服務器獲取時,只需反覆寫入MemoryStream,然後知道爲第二個請求設置的長度,並且可以輕鬆地寫入數據(特別是MemoryStream有一個WriteTo方法將其內容寫入另一個流) 。

這樣做的缺點是如果它是一個大文件,你會花費很多內存。這可能是你的情況的一個問題?替代方案包括:

  • 寫入文件而不是使用MemoryStream。當然,你需要清理文件 - 你基本上使用文件系統作爲更大的內存:)
  • 使用分塊傳輸編碼來「讀取塊,寫入塊」;這可能會得到正確的 - 這當然不是我以前做過的事情。
+0

分塊的方法聽起來很有趣。任何人都知道HttpWebRequest是否支持這個?如果您沒有設置內容長度,這是上傳的默認行爲嗎? – Greg 2009-12-08 09:27:25

+0

@Greg:我不確定,說實話 - 我建議你試試:) – 2009-12-08 09:50:09

相關問題