From 37effab37e2e4721dd8c9513da590b57597ad099 Mon Sep 17 00:00:00 2001 From: xusd <hugeinfo123> Date: Sat, 07 Sep 2024 14:39:43 +0800 Subject: [PATCH] 下载、删除接口优化 --- dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java | 125 +++++++++++++++++++++++++++-------------- 1 files changed, 82 insertions(+), 43 deletions(-) diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java index 8820dc0..308faea 100644 --- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java +++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java @@ -36,6 +36,8 @@ import java.net.URLEncoder; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; /** * @title: 附件信息表接口api-web端 @@ -62,19 +64,20 @@ /** * 页面附件上传-文件流方式 - * @url {ctx}/api/web/fileInfo/upload?mainId=&ownerId=&ownerType= - * @param mainId 所属业务主体编号 - * @param ownerId 所属业务编号 + * + * @param mainId 所属业务主体编号 + * @param ownerId 所属业务编号 * @param ownerType 所属业务类型 - * @param request 请求头 + * @param request 请求头 * @return Object + * @url {ctx}/api/web/fileInfo/upload?mainId=&ownerId=&ownerType= */ @PostMapping("/upload") public Object upload(@RequestParam(value = "mainId") String mainId, @RequestParam(value = "ownerId") String ownerId, @RequestParam(value = "ownerType") String ownerType, @CurrentUser String userId, MultipartHttpServletRequest request) { - try{ + try { CtUserDTO loginUser = custClient.clientGetUser(userId); UploaderDTO uploaderDTO = new UploaderDTO(); uploaderDTO.setUploaderId(loginUser.getId()); @@ -83,12 +86,12 @@ uploaderDTO.setCustId(loginUser.getCustId()); List<FileInfoBaseDTO> files = new ArrayList<>(); Iterator<String> itr = request.getFileNames(); - int fileCount = fileRelateService.countByOwnerIdAndType(ownerId, ownerType)+1; + int fileCount = fileRelateService.countByOwnerIdAndType(ownerId, ownerType) + 1; while (itr.hasNext()) { MultipartFile file = request.getFile(itr.next()); - if(file.getSize() > 30000000){ + if (file.getSize() > 30000000) { return ReturnFailUtils.getRepInfo("您上传的文件已超过30M大小限制!"); - }else { + } else { String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); if (FileUtils.checkFileSuffix(fileSuffix)) { if (StringUtils.isEmpty(ownerType)) { @@ -99,7 +102,7 @@ BeanUtils.copyProperties(fileInfo, fileInfoBaseDTO); // 如果是身份证,就调用ocr识别 - if (FileOwnerTypeBaseEnum.OWNER_TYPE_202.getIndex().equals(ownerType)){ + if (FileOwnerTypeBaseEnum.OWNER_TYPE_202.getIndex().equals(ownerType)) { fileInfoBaseDTO.setIdcardOcrResult(BaiduOcrUtils.ocrIdcard(file.getBytes())); } @@ -110,7 +113,7 @@ } } } - return ReturnSucUtils.getRepInfo( "上传成功!", files); + return ReturnSucUtils.getRepInfo("上传成功!", files); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } @@ -118,13 +121,14 @@ /** * 在线查附件-文件流方式 - * @url {ctx}/api/web/fileInfo/show/{id} - * @param id 附件编号 + * + * @param id 附件编号 * @param response 响应头 * @throws Exception + * @url {ctx}/api/web/fileInfo/show/{id} */ @GetMapping("/show/{id}") - public void show(@PathVariable(value = "id") String id, HttpServletResponse response){ + public void show(@PathVariable(value = "id") String id, HttpServletResponse response) { try { FileInfo fileInfo = service.getById(id); response.reset(); @@ -150,19 +154,20 @@ IOUtils.closeQuietly(inputStream); IOUtils.closeQuietly(outputStream); } catch (Exception e) { - log.error("controller接口[FileInfoWebController.show]请求失败,异常信息:"+e, e); + log.error("controller接口[FileInfoWebController.show]请求失败,异常信息:" + e, e); throw new ClientException("FileInfoWebController.show", e); } } /** * 在线下载附件-文件流方式 - * @url {ctx}/api/web/fileInfo/down/{id} - * @param id 附件编号 + * + * @param id 附件编号 * @param response 响应头 + * @url {ctx}/api/web/fileInfo/down/{id} */ @GetMapping("/down/{id}") - public void down(@PathVariable(value = "id") String id, HttpServletResponse response){ + public void down(@PathVariable(value = "id") String id, HttpServletResponse response) { try { FileInfo fileInfo = service.getById(id); String contentType = ContentTypeUtils.getContentType(fileInfo.getSuffix()); @@ -177,84 +182,117 @@ IOUtils.closeQuietly(inputStream); IOUtils.closeQuietly(outputStream); } catch (Exception e) { - log.error("controller接口[FileInfoWebController.down]请求失败,异常信息:"+e, e); + log.error("controller接口[FileInfoWebController.down]请求失败,异常信息:" + e, e); + throw new ClientException("FileInfoWebController.down", e); + } + } + + @GetMapping("/down/batch") + public void downBatch(@RequestParam(value = "ids") String ids, HttpServletResponse response) { + try { + String[] id = ids.split(","); + // 设置ZIP文件响应类型 + response.setContentType("application/zip"); + response.setHeader("Content-Disposition", "attachment;filename=files.zip"); + + ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream()); + for (String s : id) { + FileInfo fileInfo = service.getById(s); + FtpUtils ftpUtil = new FtpUtils(); + InputStream inputStream = ftpUtil.retrieveFileStream(fileInfo.getFullPath()); + + // 每个文件写入到ZIP包中 + zipOutputStream.putNextEntry(new ZipEntry(fileInfo.getName() + BaseConsts.DOT + fileInfo.getSuffix())); + IOUtils.copy(inputStream, zipOutputStream); + zipOutputStream.closeEntry(); + IOUtils.closeQuietly(inputStream); + } + IOUtils.closeQuietly(zipOutputStream); + } catch (Exception e) { + log.error("controller接口[FileInfoWebController.down]请求失败,异常信息:" + e, e); throw new ClientException("FileInfoWebController.down", e); } } /** * ocr识别文字 - * @url {ctx}/api/web/fileInfo/recognitionText?ownerId=&ownerType= + * * @param request * @return Object + * @url {ctx}/api/web/fileInfo/recognitionText?ownerId=&ownerType= */ @PostMapping(value = "/recognitionText") - public Object recognitionText(MultipartHttpServletRequest request){ - try{ - Map<String , Object> result = Maps.newHashMap(); + public Object recognitionText(MultipartHttpServletRequest request) { + try { + Map<String, Object> result = Maps.newHashMap(); Iterator<String> itr = request.getFileNames(); while (itr.hasNext()) { MultipartFile file = request.getFile(itr.next()); - try{ - Map<String , Object> map = BaiduOcrUtils.ocrText(file.getBytes()); + try { + Map<String, Object> map = BaiduOcrUtils.ocrText(file.getBytes()); result.put("ocrResult", map); - }catch (Exception e){ - log.error("Controller接口[FileInfoController.recognitionText]请求异常:"+e, e); + } catch (Exception e) { + log.error("Controller接口[FileInfoController.recognitionText]请求异常:" + e, e); return ReturnFailUtils.getRepInfo("OCR失败!"); } } return ReturnSucUtils.getRepInfo("识别成功", result); - }catch (Exception e){ + } catch (Exception e) { return ReturnFailUtils.getRepInfo(e.getMessage()); } } /** * 查看附件组件-分类查询附件 - * @url {ctx}/api/web/fileInfo/listFileByCat + * * @param mainId 所属业务主体编号 * @return Object + * @url {ctx}/api/web/fileInfo/listFileByCat */ @GetMapping("/listFileByCat") public Object listFileByCat(@RequestParam(value = "mainId") String mainId, @CurrentUser String userId) { - try{ + try { Map<String, Object> terms = Maps.newHashMap(); // 材料大类 String fileOwnerCat = request.getParameter("fileOwnerCat"); - if (StringUtils.isNotBlank(fileOwnerCat)){ + if (StringUtils.isNotBlank(fileOwnerCat)) { terms.put("ownerCat", fileOwnerCat); } // 上传时间区间 String createStart = request.getParameter("createStart"); String createEnd = request.getParameter("createEnd"); - if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) { + if (StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) { terms.put("createStart", createStart); terms.put("createEnd", createEnd); } // 上传人类型 String uploaderType = request.getParameter("uploaderType"); - if (StringUtils.isNotBlank(uploaderType)){ + if (StringUtils.isNotBlank(uploaderType)) { terms.put("uploaderType", uploaderType); } // 所属主体编号 terms.put("mainId", mainId); return ReturnSucUtils.getRepInfo(service.webListFileByCat(terms)); } catch (Exception e) { - log.error("service方法[FileInfoWebController.listFileByCat]请求失败,异常信息:"+e, e); + log.error("service方法[FileInfoWebController.listFileByCat]请求失败,异常信息:" + e, e); return ReturnFailUtils.getRepInfo(); } } /** * 删除附件 - * @url {ctx}/api/web/fileInfo/deleteFileById?id= - * @param id 附件编号 + * + * @param ids 附件编号集合 * @return Object + * @url {ctx}/api/web/fileInfo/deleteFileById?id= */ - @GetMapping("/deleteFileById") - public Object deleteFileById(@RequestParam(value = "id") String id) { + @DeleteMapping("/deleteFileById") + public Object deleteFileById(@RequestParam(value = "ids") String ids) { try { - service.deleteFileById(id); + String[] id = ids.split(","); + for (String s : id) { + service.deleteFileById(s); + } return ReturnSucUtils.getRepInfo(); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); @@ -263,19 +301,20 @@ /** * 根据多个所属编号查询附件并根据先根据ownerId再根据附件类型分组 - * @url {ctx}/api/web/fileInfo/listIdTypeInfo + * * @return Object + * @url {ctx}/api/web/fileInfo/listIdTypeInfo */ @PostMapping("/listIdTypeInfo") public Object listIdTypeInfo(@RequestBody IdFileDTO idFileDTO) { try { Map<String, Object> term = new HashMap<>(); - String ownerIds = idFileDTO.getOwnerIdList().stream().map(String:: valueOf).collect(Collectors.joining("','")); - String types = idFileDTO.getTypeList().stream().map(String:: valueOf).collect(Collectors.joining("','")); - if(StringUtils.isNotBlank(ownerIds)){ + String ownerIds = idFileDTO.getOwnerIdList().stream().map(String::valueOf).collect(Collectors.joining("','")); + String types = idFileDTO.getTypeList().stream().map(String::valueOf).collect(Collectors.joining("','")); + if (StringUtils.isNotBlank(ownerIds)) { ownerIds = "'" + ownerIds + "'"; } - if(StringUtils.isNotBlank(types)){ + if (StringUtils.isNotBlank(types)) { types = "'" + types + "'"; } term.put("ownerIds", ownerIds); -- Gitblit v1.8.0