服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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

    页面一开始进去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<contents.length;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"%>

<head>
<style>
</style>
</head>
<body>
<%arraylist list=(arraylist)request.getattribute("list");
  for(int i=0;i<list.size();i++)
  {
  string a=java.net.urlencoder.encode((string)list.get(i));

   out.print("<a href=./loaded.do?name="+a+">"+list.get(i)+"</a><br>");
  }
  %>
</body>
</html>
注意,下划线画中的代码的作用,就是解决问题的所在。
接下来可以直接传入到loadedaction中,也可以通过一个form,我演示的是通过一个form
form代码如下
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")); 
如果不这样做你将要下载的文件名是乱码。
说明就到这里,如果有问题或要eclipse下的工程代码可以留下你的地址,我会尽可能的给你发邮件。
我的邮件aeoluswqq@163.com

扫描关注微信公众号