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

发表于:2007-06-11来源:作者:点击数: 标签:
页面一开始进去action,action负责把file文件夹下的所有文件读入一个ArrayList中。Action代码如下: ArrayListlist=newArrayList(); Stringpath=request.getRealPath("/")+"file"; StringFullPath; //System.out.println(path); myDir=newFile(path); list.c

页面一开始进去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;i
FullPath=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)



原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
...