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 FileLoad { /** * 使用response返回文件流 */ public void loadFile(String filePath, HttpServletResponse response) { // 声明工具类 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 + "]"); } // 获取文件名 String fileName = file.getName(); // 输出文件流到浏览器 in = new BufferedInputStream(new FileInputStream(filePath)); out = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/x-download;charset=utf-8"); 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) { e.printStackTrace(); } finally { closeStream(in, out); } } /** * 关闭输入输出流 */ public 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(); } } } }