不依赖框架的文件下载

来源:互联网 发布:JAVA classpath 和path 编辑:程序博客网 时间:2024/06/08 03:32
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, 0, len);            }            inStream.close();            response.getOutputStream().close();        } catch (IOException e) {            e.printStackTrace();            inStream.close();            response.getOutputStream().close();        }    }}

Action中调用

FileUtils.downloadFile(ServletActionContext.getRequest(),ServletActionContext.getResponse(), "/WEB-INF/model/template/"+ fileName);
其中ServletActionContext.getRequest(),ServletActionContext.getResponse()是struts2中使用,不同框架不同。

0 0
原创粉丝点击