在SpringBoot工程中使用MultipartFile类上传文件时报java.io.FileNotFoundExceprion

代码中是这样写的,使用MultipartFile类来接受前端传入的file类型的图片或者文件,上传时发现报以下错误。

问题原因总结如下:

1.spring boot的服务在启动时,会在操作系统的/tmp目录下生成一个Tomcat.*的文件目录,用于"java.io.tmpdir"文件流操作

2.当程序对文件进行操作(上传)时,会在此目录下生成临时文件,暂存在临时文件中

lunix系统的tmpwatch命令会删除10天未使用的临时文件

长时间不进行上传操作,会导致tmp下面的目录Tomcat.*被删除,且删除的文件不可恢复,后续程序的上传操作仍然找tmp/Tomcat.*这个目录,其实已经不存在了,导致上传报错。

解决方案:

1.临时方案:重启服务,会重新生成tomcat.*目录,但是生产环境不建议这样操作。只是紧急的临时处理办法。

2.增加服务启动配置,指定文件上传目录。

       此处指定的目录为/tmp,tmp为linux系统的临时文件目录,会自动的定期清除,且该目录一直存在。无需手动清除文件上传产生的临时文件。

       或者指定到其他目录,在服务器上自己手动创建一个单独的文件上传目录。

3.修改tmpwatch 删除文件的逻辑,系统级别的命令,不建议操作

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot项目使用MultipartFile上传文件,可以按照以下步骤: 1. 在前端页面添加文件上传表单,例如: ```html <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <button type="submit">上传</button> </form> ``` 2. 在后端Controller添加文件上传处理方法,例如: ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return "上传失败,请选择文件"; } try { // 获取文件名 String fileName = file.getOriginalFilename(); // 获取文件的字节数组 byte[] bytes = file.getBytes(); // TODO: 保存文件到指定位置 return "上传成功"; } catch (IOException e) { e.printStackTrace(); return "上传失败:" + e.getMessage(); } } ``` 在上面的代码,我们首先检查上传的文件是否为空,然后获取文件名和文件的字节数组,并将其保存到指定位置。请注意,由于我们使用了`enctype="multipart/form-data"`,因此必须使用`@RequestParam`注解来获取文件参数。 3. 在SpringBoot的`application.properties`文件配置文件上传的最大限制大小,例如: ```properties spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` 在上面的配置,我们将文件上传的最大限制大小设置为10MB。如果上传的文件大小超过了这个限制,将会抛出`MaxUploadSizeExceededException`异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值