2015-12-03 26 views
2

我试图从一个url下载zip文件夹。该url指向包含文档集的Sharepoint中的一个库。如果URL被粘贴到浏览器中,它会下载一个zip文件。虽然试图从代码做同样的事情,我只能下载32426字节。我尝试了两种方法 - 一种是使用WebClient的DownloadDataAsync(),另一种是WebRequest和响应。这两个只读32426字节,而zip文件夹接近6 MB。从wcf c中的URL下载zip文件#

using (var Webclient1 = new WebClient()) 
{ 
    Webclient1.Headers.Add("Accept: text/html, application/xhtml+xml, */*"); 
    Webclient1.Headers.Add("User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"); 

    byte[] data = null; 
    Webclient1.DownloadDataCompleted += 
    delegate(object sender, DownloadDataCompletedEventArgs e) 
    { 
     data = e.Result; 
    }; 

    Webclient1.DownloadDataAsync(uri); 
    while (Webclient1.IsBusy) 
    { 
     System.Threading.Thread.Sleep(10000); 
    } 

    var len = data.Length; 
} 

使用的HttpRequest和响应

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
//request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials; 
request.Accept = @"text/html, application/xhtml+xml, */*"; 
request.UserAgent = @"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"; 

request.Timeout = 1000000; 
using (var response = request.GetResponse()) 
{ 
    MemoryStream stream2 = new MemoryStream(); 
    var stream = response.GetResponseStream(); 
    stream.CopyTo(stream2); 
    return stream2.ToArray(); 
} 

双方念不完整的内容。

回答

0

这应该工作:

public bool DownloadFile(string itemUrl, string localPath) 
     { 
      bool downloadSuccess = false; 

      try 
      { 
       using (IOFile.Stream itemFileStream = GetItemAsStream(itemUrl)) 
       { 
        using (IOFile.Stream localStream = IOFile.File.Create(localPath)) 
        { 
         itemFileStream.CopyTo(localStream); 
         downloadSuccess = true; 
        } 
       } 
      } 
      catch (Exception err) 
      { 

      } 

      return downloadSuccess; 
     } 


protected IOFile.Stream GetItemAsStream(string itemUrl) 
     { 
      IOFile.Stream stream = null; 
      try 
      { 
       FileInformation fileInfo = File.OpenBinaryDirect(_context, itemUrl); 
       stream = fileInfo.Stream;     
      } 
      catch (Exception err) 
      { 
       throw new ApplicationException(string.Format("Error executing method {0}. {1}", MethodBase.GetCurrentMethod().Name, err.Message)); 
      } 

      return stream; 
     }