界面:
<span style="font-size:18px;"><h2>
<a href="struts_filedownload.do?path=upload/file.doc">下载文件</a>
</h2></span>
逻辑处理类:
<span style="font-size:18px;">package com.java.struts.action;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class FileDownloadAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获得要下载的文件名
String path = request.getParameter("path");
//如果是从服务器上取就用这个获得系统的绝对路径
String filepath = servlet.getServletContext().getRealPath("/" + path);
File uploadFile = new File(filepath);
InputStream fis = new FileInputStream(uploadFile);
OutputStream fos = response.getOutputStream();
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
//这个就是弹出下载对话框的关键代码
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(path, "utf-8"));
int byteRead = 0;
//用输入流先去读,然后用输出流去写
byte[] buffer = new byte[8192];
while((byteRead = bis.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, byteRead);
}
bos.flush();
fis.close();
bis.close();
fos.close();
bos.close();
return null;
}
}</span>