报错:StandardServletMultipartResolver : Failed to perform cleanup of multipart items

2023-11-11

报错

在文件上传接口,解析文件的时候报错,报错信息如下:

s.w.m.s.StandardServletMultipartResolver : Failed to perform cleanup of multipart items
java.io.UncheckedIOException: Cannot delete C:\Users\username\AppData\Local\Temp\tomcat.8080.xxxx\work\Tomcat\localhost\ROOT\upload_xxxx_00000000.tmp

使用场景描述

从文件上传接口,上传表格文件,然后对表格的内容进行解析,将解析出的数据存入数据库。
需要从接口参数 MultipartFile 中,获取到 InputStream ,以供之后 解析数据逻辑 使用。

文件上传接口,业务逻辑能够正常执行。但是,控制台会报出如上的错误。

报错原因

使用完 InputStream 之后,没有关闭。导致 tomcat 临时文件无法删除。

解决办法就是,使用完InputStream后,关闭它。

解决方案

1. @Cleanup(推荐)

使用 Lombok 的 @Cleanup 注解,释放资源。

@Cleanup
InputStream inputStream;

代码示例:

	@PostMapping("upload")
	@ApiOperation(value = "上传表格文件,解析表格", notes = "")
	public String upload(MultipartFile file) {
		// 表格文件校验逻辑。

		// 解析表格,需要从 MultipartFart 获取到输入流 InputStream。
		try {
			// 输入流需要关闭,使用 @Cleanup 注解,否则会报异常。
			@Cleanup
			InputStream inputStream = file.getInputStream();

			// 表格解析业务逻辑。

		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("IOException:" + e);
		}

		return "文件上传成功";
	}

2. IOUtils.closeQuietly

使用 IOUtils.closeQuietly 方法,释放资源。此方法需要在 finally 代码块中使用。

IOUtils.closeQuietly(inputStream);

示例代码:

import org.apache.tomcat.util.http.fileupload.IOUtils;
	@PostMapping("upload")
	@ApiOperation(value = "上传表格文件,解析表格", notes = "")
	public String upload(MultipartFile file) {
		// 表格文件校验逻辑。

		// 解析表格,需要从 MultipartFart 获取到输入流 InputStream。
		InputStream inputStream = null;
		try {
			inputStream = file.getInputStream();

			// 表格解析业务逻辑。

		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("IOException:" + e);
		} finally {
			IOUtils.closeQuietly(inputStream);
		}

		return "文件上传成功";
	}

3. InputStream.close()

此方法为 Java InputStream 提供的默认方法。

直接关闭输出流。close() 方法,需要在 finally 中调用。

	if (inputStream != null) {
		try {
			inputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

代码示例:

	@PostMapping("upload")
	@ApiOperation(value = "上传表格文件,解析表格", notes = "")
	public String upload(MultipartFile file) {
		// 表格文件校验逻辑。

		// 解析表格,需要从 MultipartFart 获取到输入流 InputStream。
		InputStream inputStream = null;
		try {
			inputStream = file.getInputStream();

			// 表格解析业务逻辑。

		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("IOException:" + e);
		} finally {
			if (inputStream != null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

		return "文件上传成功";
	}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

报错:StandardServletMultipartResolver : Failed to perform cleanup of multipart items 的相关文章

  • 将 GAE/J 上的 pdfjet 生成的 PDF 文件上传到 Google Docs

    我需要将 PDF 文件上传到用户谷歌文档 该文件是由谷歌应用引擎上的 pdfjet 生成的 我想出使用 pdfjet for gae j 生成 pdf pdfjet 使用流来创建 pdf 无论如何 是否可以将流转换为文件 以便我可以上传给用
  • 如何在java中以编程方式访问网页

    有一个网页 我想从中检索某个字符串 为此 我需要登录 单击一些按钮 填充文本框 单击另一个按钮 然后就会出现字符串 我怎样才能编写一个java程序来自动执行此操作 是否有任何有用的库用于此目的 Thanks Try HtmlUnit htt
  • 如何在Android中将文件转换为base64(如.pdf、.text)?

    如何将 SD 卡文档 pdf txt 转换为 Base 64 字符串并将字符串发送到服务器 这个方法对我有用 String encodeFileToBase64Binary encodeFileToBase64Binary yourFile
  • 在 Java 中将日期从 UTC 转换为 PST

    我需要将日期从 Google App Engine 本地服务器时区转换为 Java 中的太平洋时间 我尝试使用 Calendar calstart Calendar getInstance calstart setTimeZone Time
  • setSize() 不起作用?

    我有一个程序 需要两个按钮 一个是常规按钮 另一个具有根据鼠标悬停而变化的图片 目前 由于图片很大 JButton自定义也很大 我可以更改自定义的大小并保持图像 和翻转图像 成比例吗 我尝试过 setSize 但它没有任何作用 对于任何反馈
  • Spring JSON序列化、Gson反序列化

    我目前在某些内部对象的反序列化方面遇到问题 在春天 我在使用输出之前初始化所有对象 ResponseBody 例如 这是一个响应 id 1 location id 1 extra location data id 2 location 1
  • 将 hyperjaxb3 升级到 jpa 2.1

    我正在尝试在使用 maven jpa hibernate 和 hyperjaxb 的 eclipse 项目中升级到 JPA 2 1 当我尝试执行以下操作时出现以下错误Run As Run on Server从日食内部 java lang N
  • Android 上 WebRTC 的自定义视频源

    Overview 我想使用自定义视频源通过 WebRTC Android 实现来直播视频 如果我理解正确的话 现有的实现仅支持 Android 手机上的前置和后置摄像头 以下类与此场景相关 Camera1Enumerator java ht
  • 由于 maven-surefire-plugin,Maven 构建失败

    我这里有类似的问题eclipse 中缺少 maven surefire plugin https stackoverflow com questions 23588957 maven surefire plugin missing in e
  • HTTPURLConnection 不遵循从 HTTP 到 HTTPS 的重定向

    我不明白为什么JavaHttpURLConnection不遵循从 HTTP 到 HTTPS URL 的 HTTP 重定向 我使用以下代码来获取页面https httpstat us https httpstat us import java
  • 使用 Jquery Ajax 将数据从 jsp 发送到 struts2 操作类

    我需要使用 jquery Ajax 将表单数据从 jsp 传递到 struts2 并从 Struts2 操作类接收回 JSON 数据 我已经给出了下面的代码 当我传递 AJAX 数据时 url search action searchTex
  • 动态更新 LookAndFeel 值

    我希望能够动态更新 Swing GUI 的 LookAndFeel 属性 在本例中 我有一个简单的 Swing Awt 游戏 运行最初为 Nimbus 的游戏LookAndFeel 在启动后的各个时刻 我只想更改 比方说 一个细节 应用程序
  • 处理大数据表时应该如何使用Hibernate Mapping

    问题定义 我有一个包含大量数据 超过 100 000 行 的数据库表 表结构如下 AppID DocID DocStatus 1 100 0 1 101 1 2 200 0 2 300 1 每个 applicationID 可能有数千个文档
  • 如何在 jax-ws 客户端中隐藏(可能)由 jax-ws 库引起的警告

    我正在使用 netbeans 在我的应用程序中生成 Web 服务客户端 我的程序使用 jax ws 库来设置调用 Web 服务的超时 出现问题是因为每当我启动这个程序时它都会生成很多这样的警告消息 2010 年 12 月 13 日下午 4
  • Jersey/JAX-RS:如何自动使用@Valid递归级联bean验证?

    我正在 Jersey 的 REST 资源端点中验证我的 POJO public class Resource POST public Response post NotNull Valid final POJO pojo public cl
  • 尝试模拟静态时出现 NoClassDefFoundError 或 NoSuchMethodError (不兼容的依赖项)

    When a class with static method is mocked an exception been thrown The version 2 0 0 of PowerMock displays NoClassDefFou
  • 部署到 Glassfish 4.1 时 URL 模式无效

    如果用户已经通过身份验证 我有一个网络过滤器可以从登录和索引页面重定向 最初我有一个无效的 URL 模式 我修复了无效模式并尝试重新部署以接收以下内容 java lang IllegalArgumentException Invalid U
  • SSLHandShakeException 没有适当的协议

    我最近向我的网站添加了 SSL 可以通过 https 访问它 现在 当我的 java 应用程序尝试向我的网站发出请求并使用缓冲读取器从中读取时 它会生成此堆栈跟踪 我没有使用自签名证书 该证书来自 Namecheap 它使用 COMODO
  • 如何使用 Java 1.4 和 SAX 将任意数据编码为 XML?

    我们使用 SAX 来解析 XML 因为它不需要将整个 XML 文档读入内存来解析单个值 我读过很多文章 坚持认为 SAX 只能用于解析 解码 XML 而不能创建它 这是真的 不 这不是真的 您可以使用类似于以下内容的方式将 XML 编码为
  • 运行外部进程的非阻塞线程

    我创建了一个 Java GUI 应用程序 它充当许多低级外部进程的包装器 该实用程序按原样运行 但迫切需要一项重大改进 我希望我的外部进程以非阻塞方式运行 这将允许我并行服务其他请求 简而言之 我希望能够在生成数据时处理来自外部进程的数据

随机推荐