URL中包含中文文件名的问题

本文详细介绍了如何在使用Apache负载均衡的情况下,解决中文文件名的URL解析问题,通过中间文件和数据流的方式实现了中文文件名的正常下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近遇到个棘手的问题,业务部门在上传中文名称的附件后,要求在前段下载的时候,直接保存为当初上传得时候的中文名称,按照通用的作法就是把数据库中相关的文章链接保存为直接包含文件名称的路径就好,这样也就意味在url中会包含中文,不巧的是我们网站前段加了Apache的负载均衡,而Apache又恰巧不能解析包含中文的url,中文都被解析成乱码了,想了好多办法终于用中间文件和数据流的方式巧妙的绕过了不能解析中文url
的问题。
中间页面的代码如下:

--test.jsp--
<%@page import="java.io.OutputStream"%>
<%@page import="java.io.FileInputStream"%>
<%
String fileName=new String("**风险揭示书.pdf".getBytes("gb2312"),"ISO8859-1");
String filePath=application.getRealPath("/")+“/upload/20120713/**2012071301.pdf”;//application.getRealPath("/")+"相对根目录的路径";

response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
FileInputStream in = new FileInputStream(filePath); // 读入文件
OutputStream os = response.getOutputStream();
os.flush();
int aRead = 0;
while ((aRead = in.read()) != -1 & in != null)
{
os.write(aRead);
}
os.flush();
os.close();
in.close();
%>


然后,使用如下html代码
<a href="/**/test.jsp">**风险揭示书.pdf</a>

就可以下到文件名称包含包含中文的文件了。
这个方法真的是很巧妙,使用了服务器流来下载文件,为此,我特意又搜集了些相关资料如附件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值