2010-03-14 87 views
3

我試圖使用WebClient.DownloadData下載文件。通常下載是正常的,但對於某些Url,下載只是掛起。WebClient.DownloadData掛起

我試着重寫WebClient,並設置WebRequest超時,並沒有幫助。

我也嘗試創建WebRequest(超時),然後獲取WebResponse,然後獲取流。當我讀取流時,它會再次掛起。

這是掛起URL的示例:http://www.daikodo.com/genki-back/back-img/10genki-2.jpg

任何想法?

+0

當您設置超時時間超時? – 2010-03-14 09:32:45

+0

不,那是我的問題。我的過程只是掛起,直到我殺死它。 – sagie 2010-03-14 09:42:35

+0

你可以發佈你的下載代碼嗎?從目前的迴應看,問題似乎更可能是您的連接而不是您的代碼,但如果我們可以看到您的代碼,它將有助於確認這一點。 – 2010-03-23 10:37:31

回答

1

下面是我用來從多個服務器下載文件的方法。請注意,我已經設置了從響應流中讀取多少的限制,因爲如果我得到的文件超過了指定的大小,我不想全部讀取它。在我的應用程序中,沒有URL會導致文件超出大小;您可以省略此限制或根據需要增加此數量。

int MaxBytes = 8912; // set as needed for the max size file you expect to download 
string uri = "http://your.url.here/"; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
request.Timeout = 5000; // milliseconds, adjust as needed 
request.ReadWriteTimeout = 10000; // milliseconds, adjust as needed 
using (var response = request.GetResponse()) 
{ 
    using (var responseStream = response.GetResponseStream()) 
    { 
     // Process the stream 
     byte[] buf = new byte[1024]; 
     string tempString = null; 
     StringBuilder sb = new StringBuilder(); 
     int count = 0; 
     do 
     { 
      count = responseStream.Read(buf, 0, buf.Length); 
      if (count != 0) 
      { 
       tempString = Encoding.ASCII.GetString(buf, 0, count); 
       sb.Append(tempString); 
      } 
     } 
     while (count > 0 && sb.Length < MaxBytes); 

     responseStream.Close(); 
     response.Close(); 

     return sb.ToString(); 
    } 
} 

我不知道這是否會解決您遇到的懸掛問題,但它適用於我的應用程序。

+0

正如我在我的問題中所說的那樣,我已經嘗試了這一點,並得到了相同的結果。我下載的文件大約是512K,下載大約需要40分鐘。 – sagie 2010-03-21 06:54:15

0

我認爲這可能是你自己的問題,因爲我的應用程序沒有掛起。這是我的代碼示例。你可以在這裏發佈你的代碼嗎?

System.Net.WebClient client = new System.Net.WebClient(); 
string url = @"http://www.daikodo.com/genki-back/back-img/10genki-2.jpg"; 
string savePath = @"C:\Temp\test.jpg"; 

Console.WriteLine("Downloading from: " + url); 
byte[] result = client.DownloadData(url); 
System.IO.File.WriteAllBytes(savePath, result); 

Console.WriteLine("Download is done! It has been saved to: " + savePath); 
Console.ReadKey(); 
+0

下載數據需要多長時間? 我測試過了,我發現它正在下載數據,但它需要大約40分鐘。使用瀏覽器它需要少於一秒 – sagie 2010-03-21 06:33:55

+0

它只花了我幾秒鐘來下載我的圖片。 – 2010-03-21 09:37:58

0

我剛剛在我的下載中出現長時間延遲的問題,對我而言,這是因爲我添加了一個檢查來查看uri是否有效。如果有人遇到同樣的問題,請檢查您的其他網絡請求,如URI檢查。

+1

這並沒有真正回答這個問題。如果您有不同的問題,可以通過單擊[提問](http://stackoverflow.com/questions/ask)來提問。您還可以[添加賞金](http://stackoverflow.com/help/privileges/set-bounties)在您擁有足夠的[聲譽](http://stackoverflow.com/help/)時吸引更多人關注此問題什麼聲譽) – Marusyk 2015-10-13 20:02:24