以上代码能解决单线程情况,而线程池多线程情况下使用MultipartFile进行异步操作报错,系统找不到指定的文件
C:\Users\ginseng\AppData\Local\Temp\tomcat.6121315196242383180826.8056\work\Tomcat\localhost\ROOT(系统找不到指定的文件)
因为异步情况下,主线程结束后,临时文件会被清空,因此需要通过流的方式来解决
思路回到,想通过重复读取流来解决问题,查了下找到这个:
* 将InputStream中的字节保存到ByteArrayOutputStream中。
private ByteArrayOutputStream byteArrayOutputStream = null;
public FileNodeCacheDto() {
* 缓存输入流
* @param inputStream
public FileNodeCacheDto(InputStream inputStream) {
if (Objects.isNull(inputStream)) {
return;
this.byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
try {
while ((len = inputStream.read(buffer)) > -1) {
this.byteArrayOutputStream.write(buffer, 0, len);
this.byteArrayOutputStream.flush();
} catch (IOException e) {
log.error(e.getMessage(), e);
public InputStream getCacheInputStream() {
if (Objects.isNull(byteArrayOutputStream)) {
return null;
return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
@Override
public void close() throws Exception {
try {
this.byteArrayOutputStream.close();
} catch (Exception e) {
log.error("销毁byteArrayOutputStream缓存失败", e);
在异步之前把流存储好