- package com.utils;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.URLEncoder;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * @ClassName: FileUtils.java
- *
- * @Description: 文件下载
- *
- * @author GERRARD
- *
- * @date 2015年1月27日下午3:10:10
- *
- */
- public final class FileUtils {
- /**
- * 文件下载
- *
- * @param request
- * @param response
- * @param filePath
- * 文件相对路径(带文件名和后缀)
- * @throws IOException
- */
- public static void downloadFile(HttpServletRequest request,HttpServletResponse response,String filePath) throws IOException {
- // 下载文件所在路径
- String basePath = request.getSession().getServletContext()
- .getRealPath("/");
- String downloadPath = basePath + filePath;
- File fn = new File(downloadPath);
- // 设置下载文件名
- String fileName = fn.getName();
- // 读取下载文件流
- InputStream inStream = new FileInputStream(downloadPath);
- // 设置输出的格式
- response.reset();
- response.setContentType("APPLICATION/OCTET-STREAM");
- fileName = URLEncoder.encode(fileName,"utf-8");
- response.setHeader("Content-Disposition","attachment; filename=\"" + fileName + "\"");
- // 循环取出流中的数据
- byte[] b = new byte[100];
- int len;
- try {
- while ((len = inStream.read(b)) > 0) {
- response.getOutputStream().write(b,len);
- }
- inStream.close();
- response.getOutputStream().close();
- } catch (IOException e) {
- e.printStackTrace();
- inStream.close();
- response.getOutputStream().close();
- }
- }
- }
Action中调用
其中 ServletActionContext.getRequest(),ServletActionContext.getResponse()是struts2中使用,不同框架不同。
- FileUtils.downloadFile(ServletActionContext.getRequest(),ServletActionContext.getResponse(),"/WEB-INF/model/template/"+ fileName);