返回文件流到浏览器
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import javax.servlet.http.HttpServletResponse; import org.springframework.util.StringUtils; /** * 返回文件流到浏览器 */ public class ResponseFileUtil { /** * 返回前台文件流进行展示 * * @param filePath 要返回的文件具体路径 * @param contentType 例如:"image/png" * @param response */ public static void responseFileForShow(String filePath, String contentType, HttpServletResponse response) throws Exception { ResponseFileUtil.responseFile(filePath, contentType, false, response); } /** * 返回前台文件流进行下载 * * @param filePath 要返回的文件具体路径 * @param contentType 例如:"application/x-download;charset=utf-8" * @param response */ public static void responseFileForLoad(String filePath, String contentType, HttpServletResponse response) throws Exception { ResponseFileUtil.responseFile(filePath, contentType, true, response); } /** * 使用response返回文件流 * * @param filePath 要返回的文件具体路径 * @param contentType contentType类型 * 例如:"application/x-download;charset=utf-8" * 例如:"image/png" * @param isLoad true时下载,false时展示 * @param response 借助response进行流的返回 */ public static void responseFile(String filePath, String contentType, boolean isLoad, HttpServletResponse response) throws Exception { // 声明工具类 BufferedInputStream in = null; BufferedOutputStream out = null; try { // 若路径为空 if (StringUtils.isEmpty(filePath)) { throw new Exception("invalid filepath of null."); } // 没找到文件 File file = new File(filePath); if (!file.exists()) { throw new Exception("file not exist in path [" + filePath + "]"); } // 输出文件流到浏览器 in = new BufferedInputStream(new FileInputStream(filePath)); out = new BufferedOutputStream(response.getOutputStream()); // 设置MineType类型 response.setContentType(contentType); // 如果是下载,指定文件名称 if (isLoad) { String fileName = file.getName(); // 获取文件名 response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); } byte[] buffer = new byte[8192]; int count = 0; while ((count = in.read(buffer, 0, 8192)) != -1) { out.write(buffer, 0, count); } out.flush(); file = null; } catch (Exception e) { throw e; } finally { // 关闭输入输出流 closeStream(in, out); } } /** * 关闭输入输出流 */ public static void closeStream(InputStream in, OutputStream out) { if (null != in) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != out) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }