MultipartFile中调用transferTo(File file)报FileNotFoundException问题

MultipartFile中调用transferTo(File file)报FileNotFoundException问题,虽然异常报的是MultipartFile文件找不到,

但是其实是transferTo(File file)中的file找不到目标地址(或者连不上目标地址)导致。

展示出现异常的重点代码:

 - [上传文件发生异常:java.io.FileNotFoundException: C:\Users\AppData\Local\Temp\tomcat.5008553217922572309.8307\work\Tomcat\localhost\ROOT\http:\192.168.50.121:8101test\manager-service\3\20201104\20201104113719_ad88a516-63df-43ce-a9f9-49cc884eee07.png (文件名、目录名或卷标语法不正确。),{}]
java.io.IOException: java.io.FileNotFoundException: 

 异常显示为文件找不到,在debug断点下运行的时候是能在这个地址找到临时文件的 ,然后发现如果file地址给一个本地的地址是能成功的,分析后得出结论:

  1. 本地环境为Windows系统只能用C:\\test\\*** 等作为file最终存储地址
  2. 而测试环境着为Linux系统,通常是是没有盘符的开头/manager-service/***  

总结:MultipartFile不太好用,容易出bug...

 

 

当使用`transferTo()`方法将MultipartFile对象保存到目标文件时,如果目标文件已经存在,会抛出`java.nio.file.FileAlreadyExistsException`异常。 要解决这个问题,你可以考虑以下几种方法: 1. 删除目标文件:在调用`transferTo()`方法之前,先判断目标文件是否存在,如果存在则删除。可以使用`Files.deleteIfExists(Path path)`方法来删除文件。 ```java import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; // ... Path destPath = Path.of("目标文件路径"); if (Files.exists(destPath)) { Files.delete(destPath); } multipartFile.transferTo(destPath.toFile()); ``` 2. 使用不同的目标文件名:如果不要求使用相同的文件名保存上传的文件,可以为每个上传的文件生成一个唯一的文件名,避免文件重名。 ```java import java.util.UUID; import org.apache.commons.io.FilenameUtils; // ... String originalFilename = multipartFile.getOriginalFilename(); String extension = FilenameUtils.getExtension(originalFilename); String newFilename = UUID.randomUUID().toString() + "." + extension; Path destPath = Path.of("目标文件夹路径", newFilename); multipartFile.transferTo(destPath.toFile()); ``` 3. 覆盖目标文件:如果允许覆盖已存在的目标文件,可以使用`StandardCopyOption.REPLACE_EXISTING`选项来覆盖。 ```java import java.nio.file.StandardCopyOption; // ... Path destPath = Path.of("目标文件路径"); multipartFile.transferTo(destPath.toFile(), StandardCopyOption.REPLACE_EXISTING); ``` 根据你的具体需求,选择适合的解决方法来处理`java.nio.file.FileAlreadyExistsException`异常。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月存5k的欢乐外包仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值