| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- package jnpf.util;
- import cn.hutool.core.net.URLEncodeUtil;
- import jnpf.constant.GlobalConst;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.http.MediaType;
- import org.springframework.http.MediaTypeFactory;
- import jakarta.servlet.http.HttpServletResponse;
- import org.springframework.util.StreamUtils;
- import java.io.*;
- @Slf4j
- public class FileDownloadUtil {
- /**
- * 下载文件
- *
- * @param fileName 订单信息.pdf
- */
- public static void outFile(InputStream inputStream, String fileName) {
- HttpServletResponse response = ServletUtil.getResponse();
- //设置文件写出头部
- setDownloadHeader(response, fileName);
- //写出文件
- try {
- StreamUtils.copy(inputStream, response.getOutputStream());
- } catch (IOException e) {
- log.error("写出文件失败, {}, {}, {}", fileName, e.getMessage());
- }
- }
- /**
- * 下载文件
- *
- * @param bytes
- * @param fileName 订单信息.pdf
- */
- public static void outFile(byte[] bytes, String fileName) {
- HttpServletResponse response = ServletUtil.getResponse();
- //设置文件写出头部
- setDownloadHeader(response, fileName);
- //设置文件大小
- response.setContentLength(bytes.length);
- //写出文件
- try {
- StreamUtils.copy(bytes, response.getOutputStream());
- } catch (IOException e) {
- log.error("写出文件失败, {}, {}, {}", fileName, e.getMessage());
- }
- }
- /**
- * 显示文件
- */
- public static void flushFile(InputStream inputStream, String fileName) {
- HttpServletResponse response = ServletUtil.getResponse();
- setFlushHeader(response, fileName);
- //写出文件
- try {
- StreamUtils.copy(inputStream, response.getOutputStream());
- } catch (IOException e) {
- log.error("写出图片失败, {}, {}", fileName, e.getMessage());
- }
- }
- /**
- * 显示文件
- */
- public static void flushFile(byte[] bytes, String fileName) {
- if(bytes == null || bytes.length == 0) {
- return;
- }
- HttpServletResponse response = ServletUtil.getResponse();
- setFlushHeader(response, fileName);
- //设置文件大小
- response.setContentLength(bytes.length);
- //写出文件
- try {
- StreamUtils.copy(bytes, response.getOutputStream());
- } catch (IOException e) {
- log.error("写出图片失败, {}, {}", fileName, e.getMessage());
- }
- }
- /**
- * 下载文件
- *
- * @param fileName 订单信息.pdf
- */
- public static void setDownloadHeader(HttpServletResponse response, String fileName) {
- //设置文件类型
- setFlushHeader(response, fileName);
- //编码的文件名字,关于中文乱码的改造
- // String codeFileName = fileName;
- // String agent = request.getHeader("USER-AGENT").toLowerCase();
- // if (-1 != agent.indexOf("mozilla")) {
- // //火狐,谷歌
- //// codeFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
- // }
- response.setHeader("Content-Disposition", "attachment;filename=" + URLEncodeUtil.encode(fileName, GlobalConst.DEFAULT_CHARSET));
- }
- /**
- * 下载文件
- *
- * @param fileName 订单信息.pdf
- */
- public static void setFlushHeader(HttpServletResponse response, String fileName) {
- //设置文件类型
- if (fileName != null && MediaTypeFactory.getMediaType(fileName).isPresent()) {
- response.setContentType(MediaTypeFactory.getMediaType(fileName).orElse(MediaType.ALL).toString());
- }
- response.setCharacterEncoding("UTF-8");
- }
- }
|