2010-03-14 63 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