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();
            }
        }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值