springboot文件上传异步报错
因为迁移的生产环境,在新的服务器发生了之前没有遇到的问题,这种问题是在异步文件上传的时候才会出现
错误信息如下
16:17:50.009 ERROR c.w.einv.minio.service.impl.MinioFileServiceImpl - 文件上传错误!
java.io.FileNotFoundException: /application/acc-statement-server/tmp/work/Tomcat/localhost/ROOT/upload_82aa4ea1_6e02_47b7_8d1f_26e9bd20c0ca_00000005.tmp (No such file or directory)at java.io.FileInputStream.open0(Native Method)at java.io.FileInputStream.open(FileInputStream.java:195)at java.io.FileInputStream.<init>(FileInputStream.java:138)at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.getInputStream(DiskFileItem.java:198)at org.apache.catalina.core.ApplicationPart.getInputStream(ApplicationPart.java:100)at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile.getInputStream(StandardMultipartHttpServletRequest.java:254)at com.whty.einv.minio.service.impl.MinioFileServiceImpl.upload(MinioFileServiceImpl.java:123)at com.whty.acc.statement.dubbo.task.FileHandlerTaskImpl.handleIndividualTaxFile(FileHandlerTaskImpl.java:72)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
参考【报错记录】SpringBoot中MultipartFile上传报/tmp/tomcat.***.tmp (No such file or directory)
/tmp/tomcat /work/Tomcat/localhost/RooT/upload_*****.tmp (No such file or directory)
下面是异步操作的代码,注意这里的File要转换为java.io.File
@Async@Overridepublic void handleIndividualTaxFile(String dataId, File file, File pic) {log.info("===>异步处理更新个税申报状态文件开始<===");AccIndividualTaxDeclare individualTaxDeclare = new AccIndividualTaxDeclare();log.info("===>A1.处理综合所得预扣预缴表文件开始<===");// 处理综合所得预扣预缴表文件if (!CheckEmptyUtil.isEmpty(file)) {log.info("RPA提供的file文件大小:{},文件名{}", file.getTotalSpace(), file.getName());String withholdingFormPath = INDIVIDUAL_TAX_FOLDER + dataId + CommonSettingConstants.Split.SLASH + file.getName();minioFileService.upload(bucketName, file, withholdingFormPath);// 获取文件的完整路径String withholdingFormUrl = this.getHttpUrl(endpointO, bucketName, withholdingFormPath);individualTaxDeclare.setWithholdingFormUrl(withholdingFormUrl);log.info("综合所得预扣预缴表url:{}", withholdingFormUrl);
所以需要在前面做更正
@WebLog@ApiOperation("报税状态更新(新RPA调用)")@PostMapping("/status/new")public ResponseResult<?> updateTaxDeclareStatusNew(MultipartFile file, MultipartFile pic,@Validated UpdateTaxReq updateTaxReq, BindingResult bindingResult) {// 字段非空和规则的基本校验if (bindingResult.hasErrors()) {List<FieldError> fieldErrors = bindingResult.getFieldErrors();fieldErrors.forEach(e -> log.error("校验未通过字段:{},原因:{}", e.getField(), e.getDefaultMessage()));return new ResponseResult<>(false, Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());}log.info("新RPA调用报税状态更新接口请求参数:{}", JSON.toJSONString(updateTaxReq));ResponseResult<?> rs;try {// 文件File excelFile = null;if (!CheckEmptyUtil.isEmpty(file)){String fileName = file.getOriginalFilename();String prefix = fileName.substring(fileName.lastIndexOf("."));excelFile = File.createTempFile(System.currentTimeMillis() + "", prefix);file.transferTo(excelFile);}// 图片File picFile = null;if (!CheckEmptyUtil.isEmpty(pic)){String picFileName = pic.getOriginalFilename();String picPrefix = picFileName.substring(picFileName.lastIndexOf("."));picFile = File.createTempFile(System.currentTimeMillis() + "", picPrefix);pic.transferTo(picFile);}//taxDeclarationService.updateTaxDeclareStatusForRpa(updateTaxReq, excelFile, picFile);
中间还有一个代码,可以看到
@Overridepublic void updateTaxDeclareStatusForRpa(UpdateTaxReq updateTaxReq, File file, File pic) {// 参数String dataId = updateTaxReq.getDataId();String reportCode = updateTaxReq.getReportCode();String taxType = updateTaxReq.getTaxType();{// 个税AccIndividualTaxDeclare individualTaxDeclare = new AccIndividualTaxDeclare();switch (reportCode) {case StatementConstants.RpaReturnCode.DECLARE_SUCCESS:
individualTaxDeclare.setDeclareStatus(StatementConstants.DeclareStatus.DECLARED_SUCCESS);fileHandlerTask.handleIndividualTaxFile(dataId, file, pic);
注意spring中tomcat的路径配置,当controller文件生成后,会把文件暂存在/application/acc-statement-server/tmp
中
server:port: 8354tomcat:basedir: /application/acc-statement-server/tmpuri-encoding: UTF-8#最小空闲 socket 线程数(最小线程数) min-spare-threads: 100#最大空闲 socket 线程数 max-spare-threads: 300#初始化的时候就初始化核心线程prestartminSpareThreads: true#最大线程数max-threads: 300#最大链接数max-connections: 10000#线程空闲时间max-idle-time: 60000address: 0.0.0.0
相关文章:
springboot文件上传异步报错
因为迁移的生产环境,在新的服务器发生了之前没有遇到的问题,这种问题是在异步文件上传的时候才会出现 错误信息如下 16:17:50.009 ERROR c.w.einv.minio.service.impl.MinioFileServiceImpl - 文件上传错误! java.io.FileNotFoundException: /applicati…...
error: unable to unlink old ‘.gitlab-ci.yml‘: Permission denied
#gitlab-runner 执行代码git pull origin xxx 更新时候报 error: unable to unlink old ‘.gitlab-ci.yml’: Permission denied 问题环境:centos 部署gitlab-runner 执行脚本方式 选的shell 产生问题的原因:gitlab-runner程序进程占用锁定了.gitlab-ci…...

AJAX学习笔记3练习
AJAX学习笔记2发送Post请求_biubiubiu0706的博客-CSDN博客 1.验证用户名是否可用 需求,用户输入用户名,失去焦点-->onblur失去焦点事件,发送AJAX POST请求,验证用户名是否可用 新建表 前端页面 WEB-INF下新建lib包引入依赖,要用JDBC 后端代码 package com.web;import jav…...

springboot实战(五)之sql业务日志输出,重要
目录 环境: 一、mybatis-plus之sql分析日志输出 1.配置 2.验证 3.高级输出方式 二、业务日志输出到文件 1.添加log4j2依赖 2.排除logback依赖 3.新增log4j2的配置文件 4.添加配置 5.启动测试 6.给日志请求加个id 6.1、过滤器filter实现 6.2、测试 6.3、…...
redis7.2.0 centos源码编译安装并设置开机自启动
下载源码包 wget https://github.com/redis/redis/archive/7.2.0.tar.gz tar -zxf 7.2.0.tar.gz 编译编码 编译编码 cd redis-7.2.0 make && make install 此时默认redis-server redis-cli等命令行安装到目录/usr/local/bin/目录中。 如果你想安装命令行到指定目录中你…...

网易低代码引擎Tango正式开源
一、Tango简介 Tango 是一个用于快速构建低代码平台的低代码设计器框架,借助 Tango 只需要数行代码就可以完成一个基本的低代码平台前端系统的搭建。Tango 低代码设计器直接读取前端项目的源代码,并以源代码为中心,执行和渲染前端视图,并为用户提供低代码可视化搭建能力,…...

Apache Linkis 与 OceanBase 集成:实现数据分析速度提升
导语:恭喜 OceanBase 生态全景图中又添一员,Apache Linkis 构建了一个计算中间件层,以促进上层应用程序和底层数据引擎之间的连接、治理和编排。 近日,计算中间件 Apache Linkis 在其新版本中通过数据源功能,支持用户通…...

EXPLAIN概述与字段剖析
6. 分析查询语句:EXPLAIN(重点) 6.1 概述 定位了查询慢的sQL之后,我们就可以使用EXPLAIN或DESCRIBE 工具做针对性的分析查询语句。DESCRIBE语句的使用方法与EXPLAIN语句是一样的,并且分析结果也是一样的。 MySQL中有专门负责优化SELECT语句…...
基于Java IO 序列化方案的memcached-session-manager多memcached节点配置
session的序列化方案官方推荐的有4种 java serializationmsm-kryo-serializermsm-javolution-serializermsm-xstream-serializer 关于这几种,官方也给出了比较: Java serialization is very robust and a proven technology. The biggest disadvantage IMHO is th…...

LinkedList(3):并发异常
1 LinkedList并发异常 package com.example.demo;import java.util.Iterator; import java.util.LinkedList;public class TestLinkedList {public static void main(String[] args) {LinkedList linkedList new LinkedList(); //双向链表linkedList.add(11);linkedList.add(…...
vue里el-form+el-table实现验证规则的写法
vue里el-formel-table实现验证规则的写法 vue里el-formel-table实现验证规则的写法 vue里el-formel-table实现验证规则的写法 重点是因为使用el-form el-table与单独使用el-form时数据不同,前者是对象json数组,后者是对象,导致了el-form-ite…...

K8S 基础概念学习
1.K8S 通过Deployment 实现滚动发布,比如左边的ReplicatSet 的 pod 中 是V1版本的镜像,Deployment通过 再启动一个 ReplicatSet 中启动 pod中 镜像就是V2 2.每个pod 中都有一个pause 容器,他会连接本pod中的其他容器,实现互通。p…...
Java之正则表达式的详细解析
正则表达式 1.1 正则表达式的概念及演示 在Java中,我们经常需要验证一些字符串,例如:年龄必须是2位的数字、用户名必须是8位长度而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字符串的规则。它内部描述了一些规则,…...
移动端的屏幕分辨率与浏览器的视口宽度(视口大小)是两回事儿
问:在移动端的Web设计中,屏幕的分辨率和视口大小是不是是两回事儿? 答: 是的,屏幕的分辨率和视口大小在移动端的Web设计中是两个不同的概念。 屏幕分辨率(Screen Resolution):这指的…...

分布式 - 服务器Nginx:基础系列之Nginx静态资源优化配置指令sendfile | tcp_nopush | tcp_nodelay
文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令 请求静态资源的过程:客户端通过网络接口向服务端发送请求,操作系统将这些客户端的请求传递给服务器端应用程序,服务器端应用程序会处理这些请求ÿ…...

Sentinel配置的blockHandler方法不生效
①首先配置流控的资源名跟SentinelResource中的Value配置的一定要一直且唯一 ②其次blockhandler后面的方法一定要跟下面指定的方法名称是一样的 ③也就是我犯下的错误,一定要注意是上面那个才是Sentinel的,下面的是sun公司的…我说呢,一直…...
Mybatis的三种映射关系以及联表查询
目录 一、概念 二、一对一 1、配置generatorConfig.xml 2、Vo包的编写 3、xml的sql编写 4、编写对应接口及实现类 5、测试 三、一对多 1、Vo包类的编写 2、xml的sql编写 3、编写对应接口及实现类 4、测试 四、多对多 1、Vo类 2、xml的sql配置 3、接口及接口实现…...

基于串口校时的数字钟设计
文章目录 设计目标硬件设计数码管串口 软件设计顶层模块串口接收模块数据处理模块时钟模块串口发送模块 总结 设计目标 环境:ACX720开发板 实现功能: 数码管能够显示时分秒能够接收串口数据修改时间能够将当前时间以1s一次速率发送到电脑 硬件设计 数…...
支持向量机(二)
文章目录 前言具体内容 前言 总算要对稍微有点难度的地方动手了,前面介绍的线性可分或者线性不可分的情况,都是使用平面作为分割面的,现在我们采用另一种分割面的设计方法,也就是核方法。 核方法涉及的分割面不再是 w x b 0 wx…...

Arrays.asList 和 null 类型
一、Arrays.asList 类型简析 Arrays.asList() 返回的List 是它的内部类,不能使用 retainAll() 取交集,导致元素的删除,会报错。 List<String> list Arrays.asList(value.split(",")); 替换为> List<String> list…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...