首页 > 其他分享 >不依赖于cn.hutool.extra.servlet.ServletUtil,使用Spring其他方式实现文件下载的功能

不依赖于cn.hutool.extra.servlet.ServletUtil,使用Spring其他方式实现文件下载的功能

时间:2023-11-11 14:56:51浏览次数:34  
标签:ServletUtil cn extra callRecord throw new response CRM

  在JDK17下,如下代码引用了cn.hutool.extra.servlet包下的 ServletUtil工具类的ServletUtil.write方法,执行时报”Cannot resolve method 'write(jakarta.servlet.http.HttpServletResponse, java.io.File)'“BUG,download方法通过cn.hutool.extra.servlet.ServletUtil的方法来实现文件下载的功能。

 

 1 /**
 2      * 录音下载
 3      * @return
 4      */
 5     @Override
 6     public void download(String id, HttpServletResponse response){
 7         if (StrUtil.isEmpty(id)) {
 8             throw new CrmException(CrmCodeEnum.CRM_CALL_DATA_QUERY_ERROR,"请求的数据格式");
 9         }
10         //查询通话记录
11         CallRecord callRecord = baseMapper.selectById(id);
12         if(callRecord == null){
13             throw new CrmException(CrmCodeEnum.CRM_DATA_DELETED,"此通话记录");
14         }
15         if (StrUtil.isEmpty(callRecord.getFilePath())){
16             throw new CrmException(CrmCodeEnum.CRM_CALL_DOWNLOAD_ERROR);
17         }
18         if (Objects.equals(UploadFileEnum.LOCAL.getConfig(), callRecord.getCallUpload())) {
19             ServletUtil.write(response, FileUtil.file(callRecord.getFilePath()));
20             return;
21         }
22         UploadEntity entity = new UploadEntity(callRecord.getCallRecordId() + "", callRecord.getFileName(), callRecord.getSize().longValue(), callRecord.getBatchId(),"0");
23         entity.setPath(callRecord.getFilePath());
24         InputStream inputStream = FileServiceFactory.build().downFile(entity);
25         if (inputStream != null) {
26             final String contentType = ObjectUtil.defaultIfNull(FileUtil.getMimeType(callRecord.getFileName()), "application/octet-stream");
27             ServletUtil.write(response, inputStream, contentType, callRecord.getFileName());
28         }
29     }
若不使用ServletUtil工具类,可使用Spring的org.springframework.http.HttpHeadersorg.springframework.util.StreamUtils重写它来实现文件下载:
 1 import org.springframework.http.HttpHeaders;
 2 import org.springframework.util.StreamUtils;
 3 
 4 public void download(String id, HttpServletResponse response) {
 5     if (StrUtil.isEmpty(id)) {
 6         throw new CrmException(CrmCodeEnum.CRM_CALL_DATA_QUERY_ERROR, "请求的数据格式");
 7     }
 8     // 查询通话记录
 9     CallRecord callRecord = baseMapper.selectById(id);
10     if (callRecord == null) {
11         throw new CrmException(CrmCodeEnum.CRM_DATA_DELETED, "此通话记录");
12     }
13     if (StrUtil.isEmpty(callRecord.getFilePath())) {
14         throw new CrmException(CrmCodeEnum.CRM_CALL_DOWNLOAD_ERROR);
15     }
16     if (Objects.equals(UploadFileEnum.LOCAL.getConfig(), callRecord.getCallUpload())) {
17         File file = new File(callRecord.getFilePath());
18         try (InputStream inputStream = new FileInputStream(file)) {
19             response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + callRecord.getFileName());
20             response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
21             StreamUtils.copy(inputStream, response.getOutputStream());
22             response.flushBuffer();
23         } catch (IOException e) {
24             throw new CrmException(CrmCodeEnum.CRM_CALL_DOWNLOAD_ERROR, "文件下载失败");
25         }
26         return;
27     }
28     UploadEntity entity = new UploadEntity(callRecord.getCallRecordId() + "", callRecord.getFileName(), callRecord.getSize().longValue(), callRecord.getBatchId(), "0");
29     entity.setPath(callRecord.getFilePath());
30     InputStream inputStream = FileServiceFactory.build().downFile(entity);
31     if (inputStream != null) {
32         try {
33             response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + callRecord.getFileName());
34             response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
35             StreamUtils.copy(inputStream, response.getOutputStream());
36             response.flushBuffer();
37         } catch (IOException e) {
38             throw new CrmException(CrmCodeEnum.CRM_CALL_DOWNLOAD_ERROR, "文件下载失败");
39         }
40     }
41 }

 

标签:ServletUtil,cn,extra,callRecord,throw,new,response,CRM
From: https://www.cnblogs.com/simyeo/p/17825901.html

相关文章

  • 高斯数据库HCNA之数据更新
    二、数据更新1、数据插入功能描述在表中插入新的数据注意事项只有拥有表INSERT权限的用户,才可以向表中插入数据如果使用RETURNING子句,用户必须要有该表的SELECE权限如果使用query子句插入来自查询里的数据行,用户还需要拥有在查询里使用的表的SELECT权限INSERT事务提交默认是......
  • 提成-cnblog
    编号状态B2691C2402C2373C2314B2335C2616C2397C2288C2609B25110C22911B24312B24113C25314C25315B23816B25217C24618B23519B24520B23021C25422C23623C25824C26825C......
  • 什么是DNS,A记录,子域名,CNAME别名,MX记录,TXT记录,SRV 记录,TTL值
    DNSDNS,DomainNameSystem或者DomainNameService(域名系统或者域名服务)。域名系统为Internet上的主机分配域名地址和IP地址。由于网络中的计算机都必须有个IP地址,来识别,互相之间才能通信,但让我们记住一大串的IP地址来访问网站显然是不可能的,所以用户使用域名地址,而DNS系统的......
  • 高斯数据库HCNA之数据查询
    一、数据查询1、简单查询日常查询中,最常用的是通过FROM子句实现的查询语法格式使用方法:SELECT[,...]FROMtable_reference[,...]SELECT关键字之后和FROM子句之前出现的表达式称为SELECT项,SELECT项用于指定要查询的列,FROM指定要从哪个表中查询如果要查询所有列,可以在SE......
  • ECR+ECN
    一、ECR、ECN基本含义ECR:EngineerChangeRequest(工程变更需求/请求)ECN:EngineerChangeNotification(工程变更通知)适用场景ECN(EngineeringChangeNotice)工程变更通知:通常适用于新产品开发过程中之工程变更,工程部门确认变更后发出,通知相关单位。ECR(Engineeri......
  • 外汇110网:怎样的交易商模式更赚钱?MM还是ECN/STP
    每天都会有一些新的交易商出现,许多企业家也受到吸引开设交易公司。运营交易经纪公司真的如此赚钱吗?交易经纪可以赚多少钱?对这个问题的简短回答是,交易商可以赚很多钱,但并不像大多数人想象的那么容易。这是一项具有挑战性的业务,涉及正确管理和推广等许多事项。不仅仅是一个网站、一......
  • 高斯数据库HCNA之SQL语法入门
    一、SQL语句概述1、SQL语句介绍维基百科的定义:SQL(StructuredQueryLanguage,结构性查询语句)是一种特定目的编程语言,用于管理关系数据库管理系统,或在关系流数据管理系统中进行流处理SQL基于关系代数和元组关系演算,包括一个数据定义语言和数据操作语言SQL的范围包括数据插入、......
  • 高斯数据库HCNA之数据库基本概念
    二、数据库基本概念1、数据库和数据库实例数据库(Database)数据操作系统文件或磁盘数据块的集合比如数据文件,索引文件,结构文件并非所有的数据库系统都是基于文件的,也有直接把数据写入数据存储的形式数据库实例(DatabaseInstance)实例指的就是操作系统中一系列的进程以及为这......
  • selenium等待元素加载,元素操作,执行js,切换选项卡,前进后退,异常处理,登录cnblogs,抽
    1selenium等待元素加载......
  • 高斯数据库HCNA之数据库管理
    一、数据库管理简介1、数据库管理1.1、数据库管理(DatabaseAdmin)数据库管理工作就是对数据库管理系统进行管理和维护的工作核心目标,保证数据库管理系统的稳定性安全性数据一致性系统的高性能数据库管理员(DatabaseAdministrator)从事管理和维护数据库管理系统......