使用DownloadFile C#开始下载pdf文件之前的延迟

时间:2017-01-04 21:10:29

标签: c# asp.net

我正在尝试使用以下代码下载大型25兆字节的pdf文件:

string url = "http://aaa.aaa/test.pdf";
string clientfile = HttpContext.Current.Server.MapPath("~/123.pdf");
WebClient wc = new WebClient();
wc.DownloadFile(new Uri(url, UriKind.Absolute), clientfile);

但是文件签名已损坏且无法正确下载。有没有办法在下载实际开始之前延迟文件下载?

我知道该文件是正确的,因为如果我从浏览器下载它,该文件没有损坏。

由于

1 个答案:

答案 0 :(得分:0)

我发现了问题。下载pdf文件时,它实际上是以一种名为" GZIP"的格式压缩的。使用浏览器时,会自动为客户端解压缩该文件。在.NET中使用WebClient DownloadFile方法时,必须手动完成。首先创建一个类来派生WebClient类,如下所示:

public class GzipWebClient : WebClient
    {
        protected override WebRequest GetWebRequest(Uri address)
        {
            HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            return request;
        }
    }

然后更改您的代码以使用上述类:

string url = "http://aaa.aaa/test.pdf";
string clientfile = HttpContext.Current.Server.MapPath("~/123.pdf");
GzipWebClient wc = new GzipWebClient();
wc.DownloadFile(new Uri(url, UriKind.Absolute), clientfile);

现在可以正确下载pdf文件并自动解压缩。