```java
@PostMapping("/contractUpload")
@ApiOperation("合同文件上传")
public WebResponse<FileUtilDTO> uploadContractFile(FileDTO fileDTO) {
FileUtilDTO res = new FileUtilDTO();
MultipartFile multipartFile = fileDTO.getFile();
String batchNo = IDUtil.generateNo("", redisTemplate);
if (multipartFile == null || multipartFile.isEmpty()) {
throw new BizException("未上传文件");
}
String fileName = multipartFile.getOriginalFilename();
if (!fileName.endsWith(".zip")) {
throw new BizException("文件不是zip格式");
}
//处理压缩文件
elasticSearchService.dealZipFiles(multipartFile, batchNo);
res.setBatchNo(batchNo);
return ResponseUtil.success(res, "操作成功");
}
```java
@Override
@Transactional
public boolean dealZipFiles(MultipartFile multipartFile, String batchNo) {
List<FileUtilContent> fileContentList = new ArrayList<>();
String zipFileName = multipartFile.getOriginalFilename();
String zipPath = rootFilePath +"attachment" + File.separator + "zip";
String unzipPath = rootFilePath + "attachment" + File.separator + "unzip";
String fullPath = zipPath + File.separator + zipFileName;
File file = new File(fullPath);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
try {
multipartFile.transferTo(file);
log.info("文件保存到:"+fullPath);
ZipFile zFile = new ZipFile(file);
zFile.setFileNameCharset("gbk");
zFile.extractAll(unzipPath);
log.info("文件解压到:"+unzipPath);
zipFileName = zipFileName.substring(0, zipFileName.lastIndexOf("."));
File unzipFile = new File(unzipPath + File.separator + zipFileName);
if (!unzipFile.exists()) {
throw new BizException("未读取到解压文件");
}
File[] outFiles = unzipFile.listFiles();
String contractName="";
String fileName="";
for (File outFile : outFiles) {
contractName = outFile.getName();
String contractNo = contractName.substring(contractName.lastIndexOf("-",contractName.lastIndexOf("-")-1)+1);
if (outFile.isDirectory()) {
File[] inFiles = outFile.listFiles();
for (File inFile : inFiles) {
if (!inFile.isDirectory()) {
fileName = inFile.getName();
String allText = null;
InputStream inputStream = new FileInputStream(inFile);
FileUtilContent fileUtilContent = new FileUtilContent();
fileUtilContent.setTitle(fileName);
fileUtilContent.setPackageName(zipFileName);
fileUtilContent.setBatchNo(batchNo);
fileUtilContent.setCreateTime(DateUtils.getNow());
String serialNo = IDUtil.generateNo("", redisTemplate);
fileUtilContent.setSerialNo(serialNo);
fileUtilContent.setId(IDUtil.genUUID());
fileUtilContent.setContractName(contractName);
fileUtilContent.setContractNo(contractNo);
try {
if (fileName.endsWith("doc")) {
WordExtractor wordExtractor = new WordExtractor(inputStream);
allText = wordExtractor.getText();
fileUtilContent.setFileSuffix("doc");
} else if (fileName.endsWith("docx")) {
OPCPackage opcPackage = OPCPackage.open(inputStream);
POIXMLTextExtractor ex = new XWPFWordExtractor(opcPackage);
allText = ex.getText();
fileUtilContent.setFileSuffix("docx");
} else {
continue;
}
}catch (Exception e){
log.info("处理文件失败:" + fileName);
log.info(e.getMessage());
continue;
}
String esId = saveToEs(fileName, allText, batchNo, serialNo);
fileUtilContent.setEsId(esId);
contractFileService.addFileUtilContent(fileUtilContent);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
throw new BizException("上传失败");
}
return true;
}
//保存文件内容到elasticsearch
@Override
public String saveToEs(String title, String content, String batchNo, String serialNo) {
String esId = "";
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new IndexRequest(SystemConstant.ELASTICSEARCH_IDEX_NAME).source(createBuilder(title, content, batchNo, serialNo)));
BulkResponse bulk = null;
try {
bulk = highLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
if (!bulk.hasFailures()) {
esId = bulk.getItems()[0].getResponse().getId();
}
return esId;
}