| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- package jnpf.util;
- import jnpf.constant.MsgCode;
- import lombok.Cleanup;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.poi.ss.usermodel.Workbook;
- import javax.imageio.ImageIO;
- import jakarta.servlet.ServletOutputStream;
- import jakarta.servlet.http.HttpServletRequest;
- import jakarta.servlet.http.HttpServletResponse;
- import java.awt.image.BufferedImage;
- import java.io.*;
- import java.net.URLEncoder;
- import java.nio.charset.StandardCharsets;
- /**
- * @author JNPF开发平台组
- * @version V3.1.0
- * @copyright 引迈信息技术有限公司
- * @date 2021/3/16 10:51
- */
- @Slf4j
- public class DownUtil {
- /**
- * 下载excel
- *
- * @param fileName excel名称
- * @param workbook
- */
- public static void dowloadExcel(Workbook workbook, String fileName) {
- try {
- HttpServletResponse response = ServletUtil.getResponse();
- response.setCharacterEncoding(Constants.UTF8);
- response.setHeader("content-Type", "application/vnd.ms-excel");
- response.setHeader("Content-Disposition",
- "attachment;filename=" + URLEncoder.encode(fileName, Constants.UTF8));
- @Cleanup ServletOutputStream outputStream = response.getOutputStream();
- workbook.write(outputStream);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * 下载文件
- *
- * @param file 文件
- * @param fileName 订单信息.pdf
- */
- public static void dowloadFile(File file, String fileName) {
- HttpServletResponse response = ServletUtil.getResponse();
- HttpServletRequest request = ServletUtil.getRequest();
- try {
- @Cleanup InputStream is = new FileInputStream(file);
- @Cleanup BufferedInputStream bis = new BufferedInputStream(is);
- response.setCharacterEncoding("UTF-8");
- response.setContentType("application/x-download");
- //编码的文件名字,关于中文乱码的改造
- String codeFileName = "";
- String agent = request.getHeader("USER-AGENT").toLowerCase();
- if (-1 != agent.indexOf("msie") || -1 != agent.indexOf("trident")) {
- //IE
- codeFileName = URLEncoder.encode(fileName, "UTF-8");
- } else if (-1 != agent.indexOf("mozilla")) {
- //火狐,谷歌
- codeFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
- } else {
- codeFileName = URLEncoder.encode(fileName, "UTF-8");
- }
- response.setHeader("Content-Disposition", "attachment;filename=\"" + codeFileName + "\"");
- @Cleanup OutputStream os = response.getOutputStream();
- int i;
- byte[] buff = new byte[1024 * 8];
- while ((i = bis.read(buff)) != -1) {
- os.write(buff, 0, i);
- }
- os.flush();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 下载文件
- *
- * @param paths 路径
- * @param fileName 订单信息.pdf
- */
- public static void dowloadFile(String paths, String fileName) {
- HttpServletResponse response = ServletUtil.getResponse();
- HttpServletRequest request = ServletUtil.getRequest();
- try {
- @Cleanup InputStream is = new FileInputStream(new File(XSSEscape.escapePath(paths)));
- @Cleanup BufferedInputStream bis = new BufferedInputStream(is);
- response.setCharacterEncoding("UTF-8");
- response.setContentType("text/plain");
- if (fileName.endsWith(".pdf")) {
- response.setContentType("application/pdf");
- }
- if (fileName.contains(".svg")) {
- response.setContentType("image/svg+xml");
- }
- //编码的文件名字,关于中文乱码的改造
- String codeFileName = "";
- String agent = request.getHeader("USER-AGENT").toLowerCase();
- if (-1 != agent.indexOf("msie") || -1 != agent.indexOf("trident")) {
- //IE
- codeFileName = URLEncoder.encode(fileName, "UTF-8");
- } else if (-1 != agent.indexOf("mozilla")) {
- //火狐,谷歌
- codeFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
- } else {
- codeFileName = URLEncoder.encode(fileName, "UTF-8");
- }
- response.setHeader("Content-Disposition", "attachment;filename=" + new String(codeFileName.getBytes(), "utf-8"));
- @Cleanup OutputStream os = response.getOutputStream();
- int i;
- byte[] buff = new byte[1024 * 8];
- while ((i = bis.read(buff)) != -1) {
- os.write(buff, 0, i);
- }
- os.flush();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 显示验证码
- */
- public static void downCode(Integer stringLength) {
- HttpServletResponse response = DownUtil.getResponse();
- CodeUtil codeUtil = new CodeUtil();
- codeUtil.getRandcode(response, stringLength);
- }
- /**
- * 流返回界面
- */
- public static void write(BufferedImage image) {
- try {
- HttpServletResponse response = DownUtil.getResponse();
- //将内存中的图片通过流动形式输出到客户端
- ImageIO.write(image, "PNG", response.getOutputStream());
- } catch (Exception e) {
- e.getMessage();
- }
- }
- /**
- * 设置img的response
- */
- public static HttpServletResponse getResponse() {
- HttpServletResponse response = ServletUtil.getResponse();
- response.setCharacterEncoding("UTF-8");
- //设置相应类型,告诉浏览器输出的内容为图片
- response.setContentType("image/jpeg");
- //设置响应头信息,告诉浏览器不要缓存此内容
- response.setHeader("Pragma", "No-cache");
- response.setHeader("Cache-Control", "no-cache");
- response.setDateHeader("Expire", 0);
- return response;
- }
- /**
- * 显示预览的pdf
- */
- public static void dowloadFile(File file) {
- try {
- @Cleanup OutputStream outputStream = null;
- @Cleanup InputStream in = null;
- //读取指定路径下面的文件
- in = new FileInputStream(file);
- ServletUtil.getResponse().setContentType("application/pdf;charset=utf-8");
- //编码的文件名字,关于中文乱码的改造
- String codeFileName = "";
- String agent = ServletUtil.getRequest().getHeader("USER-AGENT").toLowerCase();
- if (-1 != agent.indexOf("msie") || -1 != agent.indexOf("trident")) {
- //IE
- codeFileName = URLEncoder.encode(file.getName(), "UTF-8");
- } else if (-1 != agent.indexOf("mozilla")) {
- //火狐,谷歌
- codeFileName = new String(file.getName().getBytes("UTF-8"), StandardCharsets.ISO_8859_1);
- } else {
- codeFileName = URLEncoder.encode(file.getName(), "UTF-8");
- }
- ServletUtil.getResponse().setHeader("Content-Disposition", "filename=" + codeFileName);
- outputStream = new BufferedOutputStream(ServletUtil.getResponse().getOutputStream());
- //创建存放文件内容的数组
- byte[] buff = new byte[1024];
- //所读取的内容使用n来接收
- int n;
- //当没有读取完时,继续读取,循环
- while ((n = in.read(buff)) != -1) {
- //将字节数组的数据全部写入到输出流中
- outputStream.write(buff, 0, n);
- }
- //强制将缓存区的数据进行输出
- outputStream.flush();
- } catch (Exception e) {
- e.getMessage();
- }
- }
- /**
- * 显示文件
- */
- public static void dowloadFile(String file) {
- try {
- HttpServletResponse response = ServletUtil.getResponse();
- @Cleanup ServletOutputStream outputStream1 = response.getOutputStream();
- @Cleanup OutputStream outputStream = null;
- @Cleanup InputStream in = null;
- //读取指定路径下面的文件
- in = new FileInputStream(file);
- outputStream = new BufferedOutputStream(outputStream1);
- //创建存放文件内容的数组
- byte[] buff = new byte[1024];
- //所读取的内容使用n来接收
- int n;
- //当没有读取完时,继续读取,循环
- while ((n = in.read(buff)) != -1) {
- //将字节数组的数据全部写入到输出流中
- outputStream.write(buff, 0, n);
- }
- //强制将缓存区的数据进行输出
- outputStream.flush();
- } catch (Exception e) {
- e.getMessage();
- }
- }
- /**
- * 下载svg
- *
- * @param file
- */
- public static void dowloadSvgFile(File file) {
- try {
- @Cleanup OutputStream outputStream = null;
- @Cleanup InputStream in = null;
- //读取指定路径下面的文件
- in = new FileInputStream(file);
- ServletUtil.getResponse().setContentType("image/svg+xml;charset=utf-8");
- //编码的文件名字,关于中文乱码的改造
- String codeFileName = "";
- String agent = ServletUtil.getRequest().getHeader("USER-AGENT").toLowerCase();
- if (-1 != agent.indexOf("msie") || -1 != agent.indexOf("trident")) {
- //IE
- codeFileName = URLEncoder.encode(file.getName(), "UTF-8");
- } else if (-1 != agent.indexOf("mozilla")) {
- //火狐,谷歌
- codeFileName = new String(file.getName().getBytes("UTF-8"), "iso-8859-1");
- } else {
- codeFileName = URLEncoder.encode(file.getName(), "UTF-8");
- }
- ServletUtil.getResponse().setHeader("Content-Disposition", "filename=" + codeFileName);
- outputStream = new BufferedOutputStream(ServletUtil.getResponse().getOutputStream());
- //创建存放文件内容的数组
- byte[] buff = new byte[1024];
- //所读取的内容使用n来接收
- int n;
- //当没有读取完时,继续读取,循环
- while ((n = in.read(buff)) != -1) {
- //将字节数组的数据全部写入到输出流中
- outputStream.write(buff, 0, n);
- }
- //强制将缓存区的数据进行输出
- outputStream.flush();
- } catch (Exception e) {
- e.getMessage();
- }
- }
- /**
- * 下载文件
- *
- * @param str
- * @param fileName
- */
- public static Boolean downloadFile(String str, String fileName) {
- HttpServletResponse response = ServletUtil.getResponse();
- HttpServletRequest request = ServletUtil.getRequest();
- OutputStream os = null;
- try {
- response.reset();
- response.setContentType("application/octet-stream; charset=utf-8");
- response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes(), "ISO8859-1"));
- byte[] bytes = str.getBytes("utf-8");
- os = response.getOutputStream();
- // 将字节流传入到响应流里,响应到浏览器
- os.write(bytes);
- os.close();
- return true;
- } catch (Exception ex) {
- log.error("导出失败:", ex);
- throw new RuntimeException(MsgCode.IMP005.get());
- } finally {
- try {
- if (null != os) {
- os.close();
- }
- } catch (IOException ioEx) {
- log.error("导出失败:", ioEx);
- }
- }
- }
- }
|