1.寫一個Action,在DownloadAction extends ActionSuport
package com.jsu.struts2.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownloadAction extends ActionSupport{
private List<String> fileNames;
private String fname;
private InputStream downFile;//傳給用戶的是一個文件流
/*獲得文件夾中的所有文件名稱*/
public String findAll(){
String path =ServletActionContext.getServletContext().getRealPath("/upload");
File file = new File(path);
File [] files = file.listFiles();
fileNames = new ArrayList<String>();
for (File f:files) {
fileNames.add(f.getName());
}
return "list";
}
/*執行下載操作*/
@Override
public String execute() {
//獲得文件的路徑
String path =ServletActionContext.getServletContext().getRealPath("/upload");
System.out.println(path);
String fileRealPath = path+"\\"+fname;
System.out.println(fileRealPath);
try {
downFile = new FileInputStream(fileRealPath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return "success";
}
public List<String> getFileNames() {
return fileNames;
}
public void setFileNames(List<String> fileNames) {
this.fileNames = fileNames;
}
public String getFname() {
try {
fname = new String(fname.getBytes(),"ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return fname;
}
public void setFname(String fname) {
try {
//這裏編碼格式爲gbk,在jsp頁面的頭信息也要設置爲gbk
fname=new String(fname.getBytes("ISO-8859-1"),"gbk");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
this.fname = fname;
}
public InputStream getDownFile() {
return downFile;
}
public void setDownFile(InputStream downFile) {
this.downFile = downFile;
}
}
2.在download.jsp頁面
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> </head>
<body>
<center>
<h1>文件下載</h1>
<s:iterator var="file" value="fileNames">
<a href="down?fname=<s:property value="#file"></s:property>">
<s:property value="#file"></s:property></a>
</s:iterator>
</center>
</body>
</html>
3.在struts.xml文件配置
<!-- 文件下載 -->
<action name="down" class="com.jsu.struts2.action.DownloadAction">
<result name="list">/download.jsp</result>
<!-- 如果Struts2.0框架以流的形式反饋用戶的時候,type="stream" -->
<result name="success" type="stream">
<!-- 指明那個屬性是以流的形式反饋 -->
<param name="inputName">downFile</param>
<!-- 設置緩存區 -->
<param name="buffSize">1024</param>
<!-- 設置瀏覽器的打開方式:inline:打開直接顯示;
attachment:瀏覽器以附件的形式進行存儲
filename:文件的名稱
-->
<param name="contentDisposition">attachment;filename=${fname}</param>
</result>
</action>
4.地址欄訪問:http://localhost:8080/struts2_04/down!findAll.action
注意:upload文件夾下面一定要有文件。