[ASP.NET] 檔案下載範例: 於IE6(Win2000)導入正確檔名

摘要:檔案下載範例: 於IE6(Win2000)導入正確檔名

昨天使用者跟我說: 檔案下載功能, 檔名不正確...

但是使用WinXP & Win7 (IE7以上)測試皆為正常無誤...  囧

一問之下才發現對方使用的是Win2000 (IE6版本), 而且還不少... 囧rz

再把程式碼翻出來仔細看...  結果發現...沒有指定「檔案類型」!  (但是WinXP, 7 皆是使用正常的)


private void DownLoadFile(string parFilePath)
        // 參數: parFilePath為檔案的「完整路徑」
        {
            string FilePath = parFilePath;

            if (FilePath.Split('\\').Length != 0)
            {
                string FileName = FilePath.Split('\\')[FilePath.Split('\\').Length - 1];

                // 使用UTF8編碼檔名
        FileName = HttpUtility.UrlEncode(FileName, Encoding.UTF8);

                FileStream fr = new FileStream(FilePath, FileMode.Open);
                Byte[] buf = new Byte[fr.Length];

                fr.Read(buf, 0, Convert.ToInt32(fr.Length));
                fr.Close();
                fr.Dispose();

                Response.Clear();
                Response.ClearHeaders();
                Response.Buffer = true;

                Response.ContentType = "application/txt";  // 指定檔案型別,  之前就是少這行, IE6的檔名才會變成網頁檔名(xxx.aspx)...
                Response.ContentEncoding = Encoding.UTF8;
                Response.AddHeader("content-disposition", "attachment; filename=" + FileName);

                Response.BinaryWrite(buf);
                Response.End();
            }
        } // DownLoadFile()

 

還好公司還有Win2000的電腦可以測,

此段檔案下載範例函式跟大家分享~  (  ̄ c ̄)y▂ξ

 

參考資料: http://blog.darkthread.net/post-2007-09-05-kb-open-and-download-file-in-chinese-filename.aspx

--

不斷學習,精進自我

Herbert Fang