zip文件上传,解压,以及docx文件信息保存


```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 {
            //保存zip文件
            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="";
            //File outFile = outFiles[0];
            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")) {
                                    //log.info("处理文件ing..." + fileName);
                                    WordExtractor wordExtractor = new WordExtractor(inputStream);
                                    allText = wordExtractor.getText();

                                    fileUtilContent.setFileSuffix("doc");
                                    //fileUtilContent.setContent(allText);
                                } else if (fileName.endsWith("docx")) {
                                    //log.info("处理文件ing..." + fileName);
                                    OPCPackage opcPackage = OPCPackage.open(inputStream);
                                    POIXMLTextExtractor ex = new XWPFWordExtractor(opcPackage);
                                    allText = ex.getText();
                                    fileUtilContent.setFileSuffix("docx");
                                    //fileUtilContent.setContent(allText);

                                } else {
                                    //return ResponseUtil.fail("非法文件类型");
                                    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);

                            //fileContentList.add(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;

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值