使用http响应如何保存pdf文件

我编写了以下代码来从网页获取内容并保存到系统中。 如果网页是html格式,我可以保存它。 如果网页是pdf格式,我无法保存。 保存后如果我打开文件空白页面即将到来。

我想知道如何从响应中保存pdf文件。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url); WebResponse response = request.GetResponse(); Stream stream = response.GetResponseStream(); StreamReader reader = new StreamReader(stream); webContent = reader.ReadToEnd(); StreamWriter sw = new StreamWriter(FileName); sw.WriteLine(webContent); sw.Close(); 

请尽快帮助我。

StreamReader.ReadToEnd()返回一个字符串。 PDF文件是二进制文件,包含非字符串友好的数据。 您需要将其读入字节数组,并将字节数组写入磁盘。 更好的是,使用较小的字节数组作为缓冲区并以较小的块读取。

您还可以通过使用webclient简化整个过程:

 using (var wc = new System.Net.WebClient()) { wc.DownloadFile(Url, FileName); } 
 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url); WebResponse response = request.GetResponse(); using (Stream stream = response.GetResponseStream()) using (FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write, FileShare.None)) { stream.BlockCopy(fs); } ... public static class StreamHelper { public static void Copy(Stream source, Stream target, int blockSize) { int read; byte[] buffer = new byte[blockSize]; while ((read = source.Read(buffer, 0, blockSize)) > 0) { target.Write(buffer, 0, read); } } public static void BlockCopy(this Stream source, Stream target, int blockSize = 65536) { Copy(source, target, blockSize); } }