导入ZIP压缩包中的表格数据和对应图片通用形式
@Value("${file.tempPath}")
private String tempDir;
public List importXXX(MultipartFile multipartFile) throws Throwable{
List<String> errorMessage = new ArrayList<>();
// 用于存放图片名称和图片存储后地址的Map
Map<String, String> imageMap = new HashMap<>();
// 用于存放解析表格后的产生的实体对象
List<XXXBo> XXXList;
try {
List<String> filePathList = UnZipUtils.UnZip(multipartFile, tempDir);
for (String filePath : filePathList) {
String suffix = filePath.substring(filePath.lastIndexOf("."));
if (suffix != null) {
switch (suffix) {
case ".xlsx":
XXXList = this.parseExcel(filePath);
break;
case ".jpg":
this.uploadImage(filePath, imageMap);
break;
}
}
}
// TODO 校验数据是否合法,将不合法的剔除,同时将不合法的数据及错误原因存入errorMessage中
// TODO 替换解析表格后产生的实体对象中的图片名称为图片存储后的地址
// TODO 可以此处开线程处理,将错误或者正确信息返回.实现异步操作
// TODO 将合法的数据插入数据库中 可以使用批处理执行器进行批量插入 一万条5秒左右
}catch (Exception e) {
e.printStackTrace();
throw new BaseBusinessException("导入XXX失败,请联系系统管理员");
}finally {
// 删除解压产生的文件和临时文件夹
UnZipUtils.deleteFolder(new File(tempDir + UnZipUtils.TEMP));
}
return errorMessage;
}
解压工具类代码地址
使用批处理执行器执行批量插入