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