ASP.NET 实现PDF文件下载

本文介绍了一种在ASP.NET中下载文件的方法。 方法一:可能是最简单的、最短的方式:
1  Response.ContentType = "application/pdf";
2  Response.AppendHeader("Content-Disposition", "attachment; filename=MyFile.pdf");
3  Response.TransmitFile(Server.MapPath("~/Files/MyFile.pdf"));
4  Response.End();

第一步是设置文档内容的类型,上面的例子是下载一个.PDF格式的文件。下面是最常用的一些文档内容类型:

.htm, .html Response.ContentType = "text/HTML";

.txt Response.ContentType = "text/plain";

.doc, .rtf, .docx Response.ContentType = "Application/msword";

.xls, .xlsx Response.ContentType = "Application/x-msexcel";

.jpg, .jpeg Response.ContentType = "image/jpeg";

.gif Response.ContentType = "image/GIF";

.pdf Response.ContentType = "application/pdf";

方法二:解决.PDF文件较大时,可能导致所下载的PDF文件无法打开的方案
 1     protected void Button1_Click(object sender, EventArgs e)  
 2     {  
 3         string path;  
 4         try  
 5         {  
 6             path = Request.PhysicalApplicationPath + "/" + Session["pdfpath"].ToString() + "/PDF/" + Session["mlmc"].ToString() + ".pdf";  
 7         }  
 8         catch (Exception)  
 9         {  
10             return;  
11         }  
12         System.IO.Stream iStream = null;  
13         byte[] buffer = new Byte[10000];  
14         int length;  
15         long dataToRead;  
16         string filename = Session["mlmc"].ToString() + ".pdf";  
17   
18         try  
19         {  
20             iStream = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);  
21             dataToRead = iStream.Length;  
22             Response.Clear();  
23             Response.ClearHeaders();  
24             Response.ClearContent();  
25             Response.ContentType = "application/pdf"; //文件类型  
26             Response.AddHeader("Content-Length", dataToRead.ToString());//添加文件长度,进而显示进度  
27             Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));  
28             while (dataToRead > 0)  
29             {  
30                 if (Response.IsClientConnected)  
31                 {  
32                     length = iStream.Read(buffer, 0, 10000);  
33                     Response.OutputStream.Write(buffer, 0, length);  
34                     Response.Flush();  
35   
36                     buffer = new Byte[10000];  
37                     dataToRead = dataToRead - length;  
38                 }  
39                 else  
40                 {  
41                     dataToRead = -1;  
42                 }  
43             }  
44               
45         }  
46         catch (Exception ex)  
47         {  
48             Response.Write("文件下载时出现错误!");  
49         }  
50         finally  
51         {  
52             if (iStream != null)  
53             {  
54                 iStream.Close();  
55             }  
56             //结束响应,否则将导致网页内容被输出到文件,进而文件无法打开  
57             Response.End();  
58         }          
59     }  
通过以上代码,可在浏览器中打开一个“打开/保存”对话框来下载并保存文件。