就是不喜欢废话 直接上代码
直接 用hutool 三行代码完事 别废话
package com.huaze.common.util;
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.servlet.ServletUtil;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.nio.charset.StandardCharsets;
/**
* @author: 夏士阳
* @description: TODO 下载文件输出流
* @date: 2023/7/24 21:00
*/
public class DownloadFileTool {
/*
* @Author 夏士阳
* @Description //TODO 下载文件
* @Date 2023/7/25 13:56
* @Param dest 目标文件
**/
public static void outPutFile(String dest, HttpServletResponse response){
File file=FileUtil.file(dest);
outPutFile(file.getName(),file,response);
}
/*
* @Author 夏士阳
* @Description //TODO
* @Date 2023/7/25 13:56
* @Param fileName 文件名
* @param dest 目标文件
**/
public static void outPutFile(String fileName,String dest, HttpServletResponse response){
outPutFile(fileName,FileUtil.file(dest),response);
}
/*
* @Author 夏士阳
* @Description //TODO
* @Date 2023/7/25 13:58
* @Param destFile 目标文件
**/
public static void outPutFile(File destFile, HttpServletResponse response){
outPutFile(destFile.getName(),destFile,response);
}
/**
* @description: TODO
* @author: 夏士阳
* @date: 2023/7/24 21:01
* @param destFile 下载目标文件
* @param response 输出流
*/
public static void outPutFile(String fileName,File destFile, HttpServletResponse response){
try {
// 把文件名按UTF-8取出并按ISO8859-1 编码,保证弹出窗口中的文件名中文不乱码
// 中文不要太多,最多支持17个中文,因为header有150个字节限制。
// 这一步一定要在读取文件之后进行,否则文件名会乱码,找不到文件
fileName = new String(fileName.getBytes(StandardCharsets.UTF_8), "ISO8859-1");
// 设置强制下载不打开
response.setContentType("application/force-download");
// 设置文件名
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
ServletUtil.write(response,destFile);
} catch (Exception e) {
e.printStackTrace();
} finally {
FileUtil.del(destFile);
}
}
}