论坛首页 Web前端技术论坛

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

浏览 8660 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-07-16  
    最近遇到个棘手的问题,业务部门在上传中文名称的附件后,要求在前段下载的时候,直接保存为当初上传得时候的中文名称,按照通用的作法就是把数据库中相关的文章链接保存为直接包含文件名称的路径就好,这样也就意味在url中会包含中文,不巧的是我们网站前段加了Apache的负载均衡,而Apache又恰巧不能解析包含中文的url,中文都被解析成乱码了,想了好多办法终于用中间文件和数据流的方式巧妙的绕过了不能解析中文url
的问题。
   中间页面的代码如下:
  
--test.jsp--
<%@page import="java.io.OutputStream"%>
<%@page import="java.io.FileInputStream"%>
<%
String fileName="**风险揭示书";
String filePath=application.getRealPath("/")+“/upload/20120713/**风险揭示书.pdf”;//application.getRealPath("/")+"相对根目录的路径";

response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment;filename="+fileName+".pdf");
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>

就可以下到文件名称包含包含中文的文件了。
这个方法真的是很巧妙,使用了服务器流来下载文件,为此,我特意又搜集了些相关资料如附件。
   发表时间:2012-07-16  
楼主再接再厉 啊 任重而道远
0 请登录后投票
   发表时间:2012-07-16  
URLEncoder
URLDecoder
0 请登录后投票
   发表时间:2012-07-17  
只要把文件名放在response的头部就行了,struts2的文件下载就这样
0 请登录后投票
   发表时间:2012-07-17  
楼上的几位啊 不看帖子
0 请登录后投票
   发表时间:2012-07-17  
不明白楼主这是要干什么,如果是说用了apache的话,完全可以把附件类的东西当做apache的静态资源来处理,不会有中文乱码的问题。如果是用tomcat这类的东西,那楼上就有人说了。
0 请登录后投票
   发表时间:2012-07-17  
我感觉这代码写的真是糟糕。。。。。
0 请登录后投票
   发表时间:2012-07-17  
解码中文传播的问题,首先想到的肯定是转码,将中文转码成字母数字等就可以解决传输的问题,所以可以考虑base64转码中文部分。

第二种:在前端用escape进行中文的16进制转换,后台再转回来。
0 请登录后投票
   发表时间:2012-07-17  
magichorse 写道
不明白楼主这是要干什么,如果是说用了apache的话,完全可以把附件类的东西当做apache的静态资源来处理,不会有中文乱码的问题。如果是用tomcat这类的东西,那楼上就有人说了。

不就是直接下载文件中文的文件名乱码吗?用servlet拦截静态文件目录下的请求然后再头部放入文件名就行了。
0 请登录后投票
   发表时间:2012-07-17  
不过apache怎么会乱码呐,tomcat都不乱,apache怎么会乱,设置有问题吧
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics