diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java index 8613023..c9d4828 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java @@ -132,4 +132,10 @@ public class EdFileInfoController { public ElectromagneticResult queryChildFolder(@RequestParam String parentId) { return edFileInfoService.queryChildFolder(parentId); } + + @RequiredPermission(value = FilePermission.VIEW) + @RequestMapping(value = "preview", method = RequestMethod.GET) + public ResponseEntity preview(@RequestParam String id, HttpServletResponse response) { + return edFileInfoService.preview(id, response); + } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java index e92d942..02f8001 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/EdFileInfoService.java @@ -164,4 +164,11 @@ public interface EdFileInfoService { * @return */ ElectromagneticResult queryChildFolder(String parentId); + + /** + * 文件预览 + * @param id + * @param response + */ + ResponseEntity preview(String id, HttpServletResponse response); } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java index 16b1ca0..b87faed 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java @@ -75,12 +75,14 @@ public class EdFileInfoServiceImpl extends ServiceImpl preview(String id, HttpServletResponse response) { + try { + EdFileInfo fileInfo = this.baseMapper.selectById(id); + Assert.isTrue(Objects.nonNull(fileInfo), "文件不存在"); + String fileSysPath = commonService.getFileSysPath(fileInfo.getFilePath()); + EleCommonUtil.decryptFile(fileSysPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes())); + if (Arrays.asList("doc", "docx").contains(fileInfo.getFileType())) { + String pdfTmpPath = tmpDir + File.separator + fileInfo.getFileName() + "_" + IdUtil.fastSimpleUUID() + ".pdf"; + OfficeFileUtil.doc2pdf(fileSysPath, pdfTmpPath); + fileSysPath = pdfTmpPath; + } + FileSystemResource fileSystemResource = new FileSystemResource(fileSysPath); + String fileName = fileSystemResource.getFilename(); + HttpHeaders headers = new HttpHeaders(); + headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); + headers.add("Pragma", "no-cache"); + headers.add("Expires", "0"); + fileName = Base64.encode(fileName.substring(0, fileName.lastIndexOf("."))); + response.setHeader("content-disposition", "attachment;filename=" + fileName); + // 构建响应实体(可以返回{},错误信息--->{}", id,e.getMessage()); + log.error(info, e); + throw new BizException(info); + } + } + } diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/EleCommonUtil.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/EleCommonUtil.java index db23f7c..59c9c7d 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/EleCommonUtil.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/EleCommonUtil.java @@ -57,13 +57,25 @@ public final class EleCommonUtil { return now.format(formatter); } + public static void decryptFile(String filePath, AES aes) { + handleFile(filePath, aes, false); + } + public static void encryptFile(String filePath, AES aes) { + handleFile(filePath, aes, true); + } + + private static void handleFile(String filePath, AES aes, boolean encrypt) { String tmpPath = filePath + ".tmp"; try ( InputStream inputStream = Files.newInputStream(Paths.get(filePath)); OutputStream outputStream = Files.newOutputStream(Paths.get(tmpPath)); ) { - aes.encrypt(inputStream, outputStream, true); + if (encrypt) { + aes.encrypt(inputStream, outputStream, true); + } else { + aes.decrypt(inputStream, outputStream, true); + } } catch (Exception e) { String info = "文件加密失败"; log.error(info, e);