diff --git a/shandan-common/src/main/java/com/keyware/shandan/common/util/FileDownload.java b/shandan-common/src/main/java/com/keyware/shandan/common/util/FileDownload.java new file mode 100644 index 0000000..a69ce96 --- /dev/null +++ b/shandan-common/src/main/java/com/keyware/shandan/common/util/FileDownload.java @@ -0,0 +1,50 @@ +package com.keyware.shandan.common.util; + +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; + +public class FileDownload { + public static String download(HttpServletResponse response, File file, boolean deleteFile) { + return download(response, file, file.getName(), deleteFile); + } + + public static String download(HttpServletResponse response, File file, String fileName) { + return download(response, file, fileName, false); + } + + public static String download(HttpServletResponse response, File file, String fileName, boolean deleteFile) { + try (BufferedInputStream bis = new BufferedInputStream(Files.newInputStream(file.toPath())); + OutputStream out = response.getOutputStream()) { + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/octet-stream"); + byte[] fileNameBytes = fileName.getBytes(StandardCharsets.UTF_8); + response.setHeader("Content-disposition", "attachment;filename=" + new String(fileNameBytes, 0, fileNameBytes.length, StandardCharsets.ISO_8859_1)); + + byte[] buffer = new byte[1024]; // 缓冲区 + int bytesToRead = 0; + // 通过循环将读入的Word文件的内容输出到浏览器中 + while ((bytesToRead = bis.read(buffer)) != -1) { + out.write(buffer, 0, bytesToRead); + out.flush(); + } + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + if (deleteFile) { + try { + Thread.sleep(100); + } catch (InterruptedException ignored) { + } + file.deleteOnExit(); + } + + } + + return "download success"; + } +}