上传文件时,使用MultipartFile.transferTo()将文件保存到项目中的一个文件夹时报错如下:
java.io.IOException: java.io.FileNotFoundException: C:\Users\XXXXX\AppData\Local\Temp\tomcat.8350081478984499756.8080\work\Tomcat\localhost\ROOT\app\file\xxxx.xlsx (系统找不到指定的路径。)
原因分析:
file.transferTo 方法调用时,判断如果是相对路径,则使用temp目录为父目录,因此保存在tomcat的临时work目录。
解决办法:
通过相对路径找到那个文件夹后,获取该文件夹的绝对路径,再凭借绝对路径创建File,这样子的File才能被找到
@Override
@Transactional(rollbackFor = Exception.class)
public boolean batchAddCardData(MultipartFile file) {
try {
// 获取目标文件夹位置
File folder = new File("src/main/java/com/pi/namecardadmin/excel");
if (!folder.exists()){
folder.mkdirs();
}
File dest = new File(folder.getAbsolutePath());
// 将文件写入到目标文件夹
file.transferTo(dest);
List<CardInfo> cardInfos = ExcelUtil.getDataFromExcel(CardInfo.class, dest.getPath());
cardInfos.stream()
.parallel()
.peek(cardInfo -> {
cardInfo.setCardId(generateShortId());
cardInfoMapper.insert(cardInfo);
})
.count();
return true;
} catch (IOException e) {
throw new RuntimeException(e);
}
}