我正在尝试使用以下代码下载大型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);
但是文件签名已损坏且无法正确下载。有没有办法在下载实际开始之前延迟文件下载?
我知道该文件是正确的,因为如果我从浏览器下载它,该文件没有损坏。
由于
答案 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文件并自动解压缩。