您所在的位置:开发 > Java > Struts实现文件下载中文乱码解决方案

Struts实现文件下载中文乱码解决方案

2007-01-27 13:39 wanghongjue Java研究组织 我要评论(0) 字号:T | T
一键收藏,随时查看,分享好友!

本文给出了使用文件下载中文乱码问题的解决方案,供大家参考!

AD:

页面一开始进去action,action负责把file文件夹下的所有文件读入一个ArrayList中。Action代码如下:

ArrayList list = new ArrayList();
String path=request.getRealPath("/")+"file";
String FullPath;
//System.out.println(path);
myDir=new File(path);
list.clear();
contents=myDir.listFiles();
for(int i=0;iFullPath=contents[i].getName();
list.add(FullPath);
//System.out.println(FullPath);
}
request.setAttribute("list",list);
ActionForward forward=new ActionForward("/download.jsp"); 
return forward;


然后进入download.jsp中,这个页面主要负责把所有文件显示,并提供下载连接,代码如下:

<%@ page language="java" contentType="text/html;charset=GBK" 

import="java.util.ArrayList"%>




<%ArrayList list=(ArrayList)request.getAttribute("list");
for(int i=0;i{
String a=java.net.URLEncoder.encode((String)list.get(i));
out.print(""+list.get(i)+"
");
}
%>


注意,下划线画中的代码的作用,就是解决问题的所在。

接下来可以直接传入到loadedaction中,也可以通过一个form,我演示的是通过一个formForm代码如下:

package org.aeolus.struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class LoadForm extends ActionForm {
/*
* Generated Methods
*/
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


接下来就是action的代码:

LoadForm doc=(LoadForm)form;
String docName = new String(doc.getName().getBytes("8859_1"));
File f;
if(docName!=""){
String docFullPath=request.getRealPath("/"); 
f = new File(docFullPath+"file\\"+docName);
response.reset();        
response.setContentType("application/x-msdownload;charset=GBK"); 
System.out.print(response.getContentType());
response.setCharacterEncoding("UTF-8");
docName=java.net.URLEncoder.encode(docName,"UTF-8");
response.setHeader("Content-Disposition", "attachment; 

filename=" +new String(docName.getBytes("UTF-8"),"GBK")); 
BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len = 0;
OutputStream out = response.getOutputStream();
while((len = br.read(buf)) >0)
out.write(buf,0,len);
out.close();
response.wait();
ActionForward forward=new ActionForward("/download.jsp"); 

return forward;
}
return null;  


注意,下划线画中的代码的作用,就是解决问题的所在。说明一下:

response.setCharacterEncoding("UTF-8");
docName=java.net.URLEncoder.encode(docName,"UTF-8");
response.setHeader("Content-Disposition", "attachment; 

filename=" +new String(docName.getBytes("UTF-8"),"GBK"));


如果不这样做你将要下载的文件名是乱码。

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)


分享到:

网友评论TOP5

查看所有评论(

提交评论

  1. 彻底透视CDN痛点,互联网老兵聊聊CDN的那些事儿!
  2. 3行Python代码完成人脸识别

热点职位

更多>>

热点专题

更多>>

读书

基于Project2003的项目管理
本书的上一版本《基于Project 2002的项目管理》上市以后得到了读者的欢迎,为了更好地将Project 2003新版本的应用介绍给读者,我

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院