【问题标题】:downloading a zip file from URL in wcf c#从 wcf c# 中的 URL 下载 zip 文件
【发布时间】:2015-12-03 03:51:02
【问题描述】:

我正在尝试从 url 下载一个 zip 文件夹。 url 指向 Sharepoint 中包含文档集的库。如果 URL 粘贴在浏览器中,它会下载一个 zip 文件。在尝试从代码中执行相同操作时,我只能下载 32426 字节。我尝试了两种方法——一种是使用 WebClient 的 DownloadDataAsync(),另一种是 WebRequest 和响应。这两个都只读取 32426 字节,而 zip 文件夹接近 6 MB。

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();
}

两者都阅读了不完整的内容。

【问题讨论】:

    标签: c# wcf httprequest uri webclient


    【解决方案1】:

    这应该可行:

    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;
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多