silverlgiht 端調用 ashx 類型文件下載中文名文件出現名子亂碼問題

解決方法:

 

 SL 端。

 


            string FIleName="中文文件下載.rar"
            if (file == null) return;
            var aa = System.Windows.Browser.HttpUtility.UrlEncode(FIleName);
            var bb = Uri.EscapeUriString(FIleName);
            string urlstr = new Uri(Application.Current.Host.Source, "../Handlers/downloadAppFilesData.ashx?filename=" + bb ;

            HtmlWindow htmlPage = HtmlPage.Window;

            if (HtmlPage.IsPopupWindowAllowed)
            {
                HtmlPage.PopupWindow(new Uri(urlstr), "_blank", new HtmlPopupWindowOptions() { Left = 0, Top = 0, Toolbar = false, Status = false, Height = 20, Width = 20, Menubar = false });
            }
            else
            {
                HtmlPage.PopupWindow(new Uri(urlstr), "_blank", new HtmlPopupWindowOptions() { Left = 0, Top = 0, Toolbar = false, Status = false, Height = 20, Width = 20, Menubar = false });
            }

 

 

 

ASHX 端。

 

  //注意。用了兩個變量。 filenameforurl和 filename . 必須採用不同的轉換方法。

        public void ProcessRequest(HttpContext context)
        {
            try
            {
                string filename = context.Request["filename"];
                filename = System.Web.HttpContext.Current.Server.UrlDecode(filename);
                string filenameforurl= context.Server.HtmlDecode(context.Request["filename"]);

                string fileFolder = context.Request["filefolder"];
                if (filename == null || filename == null || filename == "" || fileFolder == "") return;
                string fileNamesPath = Path.Combine(context.Server.MapPath(".."), fileFolder, filename);

                if (fileNamesPath.Length == 0)
                {
                    throw new Exception("");
                }
                context.Response.Expires = 0;
                context.Response.Buffer = true;
                context.Response.Clear();
                // context.Response.ContentType = "text/html";
                context.Response.ContentEncoding = Encoding.UTF8;

                context.Response.ContentType = "pplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                context.Response.AddHeader("Content-Disposition", "attachment; filename=" + filenameforurl);
                if (File.Exists(fileNamesPath))
                {

                    FileInfo fileinfo = new FileInfo(fileNamesPath);
                    FileStream Openfile = fileinfo.OpenRead();
                    long byteLength = Openfile.Length;
                    byte[] streambyte = new byte[byteLength];
                    Openfile.Read(streambyte, 0, (int)(byteLength));
                    context.Response.OutputStream.Write(streambyte, 0, (int)(byteLength));
                    Openfile.Close();
                }
                else
                {
                    context.Response.Write("下載文件已不存在");
                }
            }
            catch
            {
                context.Response.Write("下載文件失敗");
            }
            finally
            {
                context.Response.End();
            }
        }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章