Controller下载本地文件

/**
 * 导出excel文件
 * 
 * @author K0570071
 * @version
 * @date 2019/11/25
 */
public class ExcelUtils {
	private static final Logger logger = LoggerFactory.getLogger(ExcelUtil.class);
	private static final String UTF8 = "UTF-8";


	public static void doExport(HttpServletResponse response, HttpServletRequest request) {
		File parentFile = new File("file/");// 相对于jar包的路径
		File file = parentFile.listFiles()[0];
		String filename = file.getName();
		logger.info("fileName:{}", filename);
		try {
			filename = new String(filename.getBytes(UTF8), UTF8);
		} catch (UnsupportedEncodingException e1) {
			logger.error(e1.getMessage());
		}
		logger.info("fileName:{}", filename);
		try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
				/*
				 * Resource resource = new
				 * ClassPathResource("file/xxx.xlsx"); String filename =
				 * resource.getFilename(); try (BufferedInputStream bis = new
				 * BufferedInputStream(resource.getInputStream());
				 */
				OutputStream out = response.getOutputStream();) {
			// 强制下载不打开
			response.setContentType("application/force-download");
			String userAgent = request.getHeader("User-Agent");
			if (userAgent.contains("Firefox")) { // 火狐浏览器需要严格按照标准处理
				filename = "=?UTF-8?B?" + (Base64Utils.encodeToString(filename.getBytes(UTF8))) + "?=";
				// 使用URLEncoder来防止文件名乱码或者读取错误
				response.setHeader("Content-Disposition", "attachment; filename=" + filename);
			} else {
				// 使用URLEncoder来防止文件名乱码或者读取错误
				response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, UTF8));
			}
			int b = 0;
			byte[] buffer = new byte[1000000];
			while (b != -1) {
				b = bis.read(buffer);
				if (b != -1)
					out.write(buffer, 0, b);
			}
			out.flush();
		} catch (IOException e) {
			logger.error(e.getMessage());
		}
	}
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值