ASP.NET实现下载的中文文件名乱码处理

早几天在系统中添加文件管理的下载功能, 要求在ASPX文件中实现, 以进行权限的控件,于是添加下列代码:
  ...
  Response.ContentType = mime; //相应的MIME TYPE
  Response.AppendHeader("Content-Disposition", "attachment; filename=/"" +fileName + "/"");
  
  Response.BinaryWrite(bytes);
  Response.End();
  ...
  
  当fileName中包含中文时, 文件下载保存时, 文件名变成了乱码, 需要用户修改,这也就违被了我设定预设文件名的初衷.
  
  解决办法1: 对fileName进行URL编码, 把下划线标注的那句改为Response.AppendHeader("Content-Disposition", "attachment; filename=/"" + Server.UrlEncode(fileName) + "/"");便可.
  
  虽然中文乱码问题解决了, 但是还有一个问题: 在测试时, 下载保存的文件名有时会变成该页面的名字(.aspx), 虽然可以把内容下载到本地, 但是需要更改文件名及类型, 这样会给用户带来很大的困惑.
  
  还有一个办法, 可以很简单的解决以上的两个问题:
  
  解决办法2: 假设当前的URL为 http://localhost/download.aspx?id=123, fileName为"下载.pdf", 我们只要把下载URL改为 http://localhost/download.aspx/下载.pdf?id=123 可, 上面下划线标注的那句代码则可以注释掉了, 试一下, 结果一定让你非常满意!

这段时间在作一个ASP.NET的网站,里面要用到文件下载系统。经过一番努力后文件是能上传与下载了,但只能下载非中文名的文件,中文的下载时就会出现乱码和报错,今天在网上查了一下资料,终于找到解决方法了:只要在原来的 FileName 处改成: HttpUtility.UrlEncode(FileName))  即可,文件下载系统还在进一步完善中,关于下载中文文件名的相关问题还在进一步的发现和实验中。

 

标注的那句改为
Response.AppendHeader("Content-Disposition", "attachment; filename=/"" + Server.UrlEncode(fileName) + "/"");
便可.
虽然中文乱码问题解决了, 但是还有一个问题: 在测试时, 下载保存的文件名有时会变成该页面的名字(.aspx), 虽然可以把内容下载到本地, 但是需要更改文件名及类型, 这样会给用户带来很大的困惑.
还有一个办法, 可以很简单的解决以上的两个问题:
解决办法2: 假设当前的URL为 http://localhost/download.aspx?id=123, fileName为"下载.pdf", 我们只要把下载URL改为 http://localhost/download.aspx/下载.pdf?id=123 可, 上面下划线标注的那句代码则可以注释掉了, 试一下, 结果一定让你非常满意!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值