1. 程式人生 > >C# 一般處理程式下載檔案

C# 一般處理程式下載檔案

利用一般處理程式下載檔案,會在很多時候用到,但是,這是一條不歸路啊,路上各種坑,不是亂碼就是下載不下來。同樣,今天我也踩上了這顆雷。還好,我是排雷兵,一樣一樣的排除

C# code

 //檔案下載
        public void downloadfile(HttpContext context, string s_fileName)
        {
            string path = s_fileName;
            System.IO.FileInfo file = new System.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath(path));
            context.Response.Clear();
            context.Response.Charset = "UTF-8";
            context.Response.ContentEncoding = System.Text.Encoding.UTF8;
            context.Response.AddHeader("Content-Type", "application/octet-stream");
            // 新增頭資訊,為"檔案下載/另存為"對話方塊指定預設檔名,設定編碼為UTF8,防止中文檔名出現亂碼
            context.Response.AddHeader("Content-Disposition","attachment; filename="+ System.Web.HttpUtility.UrlEncode(file.Name, System.Text.Encoding.UTF8));
            // 新增頭資訊,指定檔案大小,讓瀏覽器能夠顯示下載進度
            context.Response.AddHeader("Content-Length", file.Length.ToString());
            //// 指定返回的是一個不能被客戶端讀取的流,必須被下載
            context.Response.ContentType = "application/ms-excel";
            // 把檔案流傳送到客戶端
            context.Response.WriteFile(file.FullName);
            // 停止頁面的執行
            context.Response.End();
        }

注意:html頁面一定不能是用ajax去請求一般處理程式,否則累死也實現不了下載,他會永遠給你彈出一個框,一面一堆亂碼

一定要同<a href="....../a.ashx">下載</a>這樣的請求方式才可以,需要傳參的話,直接在後面拼上就行

這樣,輕輕鬆鬆搞定