页面一开始进去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
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
闽公网安备 35060202000074号