当前位置: 首页 > backend >正文

java常用工具类:实现文件下载

java常用工具类

1.java常用工具类:java实现Excel文件上传下载(模板)-hutool_hutool做excel下载-CSDN博客

2.java常用工具类:java实现excel模板导入数据,允许模板中部分数据字段为空_java导入excel,字段不能为空-CSDN博客

3.使用pinyin4j库实现中文转拼音-CSDN博客

4.java常用工具类:java实现Excel导入和导出_java 导出带参数-CSDN博客

5.java常用工具类:vue+java+aes进行加密解密(ECB、CBC模式)_vue aes加密 java解密-CSDN博客

6.java常用工具类:实现base64加盐编码、解码-CSDN博客

7.java常用工具类:判断对象中属性全是否为空-CSDN博客

8.java常用工具类:实现文件下载-CSDN博客

9.java常用工具类:计算文件大小-CSDN博客

10.java常用工具类:调用第三方接口-CSDN博客

11.java常用工具类:实现MD5加密(加盐)-CSDN博客

12.java常用工具类:生成唯一id-CSDN博客

引言

本文是实现单文件下载,和多文件打成zip压缩包进行下载

pom文件

        <!--    hutool--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.1.0</version></dependency>

常量类:Constant

/*** @Author majinzhong* @Date 2024/3/27 14:15* @Version 1.0*/
public class Constant {//windows上传文件路径public static final String WINDOWS_PATH=System.getProperty("user.dir") + "/src/main/resources/deduction/";//linux上传文件路径public static final String LINUX_PATH="/home/upload/deduction/";
}

工具类:DownloadFileUtil

import cn.hutool.core.io.FileUtil;import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;/*** @Author majinzhong* @Date 2024/7/24 15:50* @Version 1.0*/
public class DownloadFileUtil {/*** 单个文件下载* @param response* @param filePath*/public static void oneFileDownload(HttpServletResponse response,String filePath){String path = "";//判断需要上传位置boolean windows = FileUtil.isWindows();if (windows) {path = Constant.WINDOWS_PATH;} else {path = Constant.LINUX_PATH;}filePath=path+filePath;// 获取文件名String fileName = new File(filePath).getName();String encodedFileName = null;try {encodedFileName = URLEncoder.encode(fileName, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}try {// 设置响应头信息response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");response.setContentType("application/octet-stream");// 读取文件并将其写入响应输出流try (InputStream in = new FileInputStream(filePath);OutputStream out = response.getOutputStream()) {byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = in.read(buffer)) != -1) {out.write(buffer, 0, bytesRead);}}} catch (Exception e) {e.printStackTrace();}}/*** 压缩成zip进行多文件下载* @param response* @param pathList*/public static void moreFileDownload(HttpServletResponse response,List<String> pathList){String path = "";//判断需要上传位置boolean windows = FileUtil.isWindows();if (windows) {path = Constant.WINDOWS_PATH;} else {path = Constant.LINUX_PATH;}response.reset();try {response.setHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode("modelSource.zip", "UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}response.setCharacterEncoding("utf-8");response.setContentType("application/octet-stream");try(ZipOutputStream zipOutputStream=new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()))) {for(String pathName:pathList) {File file =new File(path+pathName);String fileName=file.getName();zipOutputStream.putNextEntry(new ZipEntry(fileName));try(BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file))){byte[] bytes = new byte[1024];int i=0;while((i=bis.read(bytes))!=-1) {zipOutputStream.write(bytes,0,i);}zipOutputStream.closeEntry();}catch (Exception e) {e.printStackTrace();}}}catch (Exception e) {e.printStackTrace();}}
}

http://www.xdnf.cn/news/9413.html

相关文章:

  • AD-PCB--电子设计学习思路 DAY 1
  • 从零到一:影刀RPA学习者的破局之路
  • 分布式系统中的消息幂等性与流量控制(一)
  • Vue组件技术全解析大纲
  • mediapipe标注视频姿态关键点(基础版加进阶版)
  • Navicat 17 SQL 预览时表名异常右键表名,点击设计表->SQL预览->另存为的SQL预览时,表名都是 Untitled。
  • 【Elasticsearch】scripted_upsert
  • 小白成长之路-计算机网络(四)
  • BUG调试案例十二:LM5117输出电压纹波偏大问题案例
  • 初识 ProtoBuf
  • 破解Docker镜像下载难题
  • 永磁同步电机控制算法--变结构PI调节器
  • 面向测试编程——SmartRefreshLayout的测试case
  • Ubuntu系统开放 45876/tcp 端口
  • Cookie、Session和Token鉴权
  • Python实用脚本:可视化分割txt标签数据
  • TWTSolutions水厂污水厂设计计算软件:化学强化絮凝单元
  • leetcode:1688. 比赛中的配对次数(python3解法,数学相关算法题)
  • ubuntu安装tigervnc
  • Python优雅执行SSH命令:10种方法+虚拟环境深度实践
  • 使用 mysqldump 获取 MySQL 表的完整创建 DDL
  • Spring AI(一)
  • windows 环境中 python连接到达梦库,及相关问题解决办法
  • TDengine 中的存储配置
  • 线程池详解:原理、使用与优化
  • 78. Subsets和90. Subsets II
  • Linux:基础指令与内涵理解(下)与权限
  • git 命令之-git cherry-pick
  • 短剧看广告APP系统开发:打造高效变现与用户体验双赢平台
  • 人工智能AI之机器学习基石系列 第 2 篇:数据为王——机器学习的燃料与预处理