文件下載

嗯,今天看了會兒ASP.NET文件下載的代碼,話很少說,直接上代碼瀏覽器

 1      // 上傳文件
 2         protected void Button1_Click(object sender, EventArgs e) {
 3 
 4             string path = "~/upload/";
 5 
 6             string FileName = FileUpload1.FileName;
 7 
 8             // 獲取後綴名
 9             string Suffix = FileName.Substring(FileName.LastIndexOf('.'));
10 
11             // 獲取新的文件名
12             DateTime dateNow = DateTime.Now;
13             FileName = dateNow.ToString("yyyyMMddHHmmssffff") + Suffix;
14 
15             // 獲取絕對路徑
16             path = Server.MapPath(path);
17 
18             // 檢測是否存在此路徑,沒有就建立
19             if (!Directory.Exists(path))
20                 // 建立路徑
21                 Directory.CreateDirectory(path);
22 
23             // 拼接文件路徑
24             path += FileName;
25 
26             // 上傳文件
27             FileUpload1.SaveAs(path);
28         }
29 
30         // 下載文件
31         protected void Button2_Click(object sender, EventArgs e) {
32 
33             // 默認下載路徑
34             string path = "~/upload/";
35             path = Server.MapPath(path);
36 
37             // 獲取指定文件夾
38             DirectoryInfo dir = new DirectoryInfo(path);
39             // 若文件夾不存在,返回
40             if (!dir.Exists) return;
41 
42             // 獲取指定文件夾下,全部文件
43             FileInfo[] file = dir.GetFiles();
44 
45             // 當指定文件夾下存在文件時,
46             if (file != null && file.Length > 0) {
47                 // 取最後一個文件的文件名
48                 string fileName = file[file.Length - 1].Name;
49                 // 執行下載方法,返回bool,表示是否下載成功
50                 bool IsSuccess = DownFile("~/upload/" + fileName);
51 
52             }
53         }
54 
55         /// <summary>
56         /// 下載文件方法
57         /// </summary>
58         /// <param name="path">文件的相對路徑</param>
59         public bool DownFile(string path) {
60 
61             // 將相對路徑轉爲絕對路徑
62             path = Server.MapPath(path);
63 
64             // 根據絕對路徑,查找文件
65             FileInfo file = new FileInfo(path);
66             // 若文件不存在,返回false
67             if (!file.Exists)
68                 return false;
69 
70             // 清理各類內容
71             Response.Clear();
72             Response.ClearContent();
73             Response.ClearHeaders();
74 
75             // 指定下載後的文件名
76             Response.AddHeader("Content-Disposition", "attachment;filename=" + file.Name);
77             // 獲取下載的文件大小,會在瀏覽器中顯示
78             Response.AddHeader("Content-Length", file.Length.ToString());
79             // 設置文件編碼格式,能夠爲非ASCII 字符,也能夠爲超長字符(超過1000)
80             Response.AddHeader("Content-Transfer-Encoding", "binary");
81             // 設置字符到瀏覽器的編碼,可解決中文亂碼,不徹底
82             Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
83             // 設置能夠爲任意文件後綴
84             Response.ContentType = "application/octet-stream";
85 
86             // 將文件放入HTTP輸出流
87             Response.WriteFile(file.FullName);
88 
89             // 對輸出的內容進行緩衝,防止頁面卡死
90             Response.Buffer = true;
91             // 將緩存的內容輸出
92             Response.Flush();
93             // 結束輸出
94             Response.End();
95 
96             return true;
97         }
相關文章
相關標籤/搜索