From 3b3aa954375f51d63d402cbd601d1fbef899c163 Mon Sep 17 00:00:00 2001 From: ybb <2532447764@qq.com> Date: Fri, 8 Aug 2025 15:15:26 +0800 Subject: [PATCH] =?UTF-8?q?8/7,ybb=E6=96=87=E4=BB=B6=E5=A4=B9=E5=92=8C?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E9=83=BD=E5=AE=9E=E7=8E=B0=E4=BA=86=E8=AE=B0?= =?UTF-8?q?=E5=BD=95Id=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../znpt/mapper/BusinessDataFileMapper.java | 2 + .../znpt/service/BusinessDataFileService.java | 2 +- .../impl/BusinessDataFileServiceImpl.java | 120 ++++++++++++------ .../BusinessDataFileController.java | 5 +- 4 files changed, 90 insertions(+), 39 deletions(-) diff --git a/core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java b/core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java index 73e7191..02d682b 100644 --- a/core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java +++ b/core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java @@ -4,12 +4,14 @@ import com.dite.znpt.domain.entity.BusinessDataFileEntity; import com.dite.znpt.domain.entity.BusinessDataEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; @ApiOperation("商务资料文件对象") +@Mapper public interface BusinessDataFileMapper { // 新增文件预览方法 diff --git a/core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java b/core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java index 7cb636f..9eafc83 100644 --- a/core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java +++ b/core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java @@ -37,5 +37,5 @@ public interface BusinessDataFileService { Result addfile(MultipartFile file, Long folderId); @ApiOperation("预览文件") - Result preview(Long fileId, HttpServletResponse response); + void preview(Long fileId, HttpServletResponse response); } diff --git a/core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java index cda9ef8..660f034 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java @@ -255,67 +255,91 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService { @ApiOperation("文件预览") - public Result preview(Long fileId, HttpServletResponse response) { + public void preview(Long fileId, HttpServletResponse response) { try { // 获取文件路径 String filePath = businessDataFileMapper.getPath(fileId); if (filePath == null || filePath.isEmpty()) { - return Result.error("文件不存在"); + response.setContentType("application/json; charset=UTF-8"); + response.getWriter().write("{\"status\":500,\"msg\":\"文件不存在\"}"); + return; } File file = new File(filePath); if (!file.exists()) { - return Result.error("文件不存在"); + response.setContentType("application/json; charset=UTF-8"); + response.getWriter().write("{\"status\":500,\"msg\":\"文件不存在\"}"); + return; } // 获取文件扩展名 String extension = getFileExtension(filePath); + // ... 后续 switch 语句 // 根据文件类型处理预览 switch (extension) { case "pdf": - return previewPdf(file, response); + previewPdf(file, response); + break; case "jpg": case "jpeg": case "png": case "gif": case "bmp": case "webp": - return previewImage(file, response); + previewImage(file, response); + break; case "txt": case "md": case "log": - return previewText(file, response); + previewText(file, response); + break; case "doc": case "docx": case "xls": case "xlsx": case "ppt": case "pptx": - return previewOffice(file, response); + previewOffice(file, response); + break; case "mp4": case "avi": case "mov": case "wmv": case "flv": - return previewVideo(file, response); + previewVideo(file, response); + break; case "mp3": case "wav": case "flac": case "aac": - return previewAudio(file, response); + previewAudio(file, response); + break; default: - return Result.error("暂不支持该文件类型的预览"); + try { + response.setContentType("application/json; charset=UTF-8"); + response.getWriter().write("{\"status\":500,\"msg\":\"暂不支持该文件类型的预览\"}"); + } catch (IOException e) { + e.printStackTrace(); + } + break; } } catch (Exception e) { - return Result.error("文件预览失败: " + e.getMessage()); + try { + response.setContentType("application/json; charset=UTF-8"); + response.getWriter().write("{\"status\":500,\"msg\":\"文件预览失败: " + e.getMessage() + "\"}"); + } catch (IOException ex) { + ex.printStackTrace(); + } } } - private String getFileExtension(String fileName) { - if (fileName == null || fileName.isEmpty()) { + private String getFileExtension(String filePath) { + if (filePath == null || filePath.isEmpty()) { return ""; } + // 从路径中提取文件名 + String fileName = new File(filePath).getName(); int lastDotIndex = fileName.lastIndexOf('.'); if (lastDotIndex == -1) { return ""; @@ -323,10 +347,10 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService { return fileName.substring(lastDotIndex + 1).toLowerCase(); } - private Result previewPdf(File file, HttpServletResponse response) { + private void previewPdf(File file, HttpServletResponse response) { try { response.setContentType("application/pdf"); - response.setHeader("Content-Disposition", "inline; filename=" + file.getName()); + response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8")); try (FileInputStream fis = new FileInputStream(file); OutputStream os = response.getOutputStream()) { @@ -336,17 +360,21 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService { os.write(buffer, 0, bytesRead); } } - return Result.ok("PDF预览成功"); } catch (Exception e) { - return Result.error("PDF预览失败: " + e.getMessage()); + try { + response.setContentType("application/json; charset=UTF-8"); + response.getWriter().write("{\"status\":500,\"msg\":\"PDF预览失败: " + e.getMessage() + "\"}"); + } catch (IOException ex) { + ex.printStackTrace(); + } } } - private Result previewImage(File file, HttpServletResponse response) { + private void previewImage(File file, HttpServletResponse response) { try { String contentType = getImageContentType(file.getName()); response.setContentType(contentType); - response.setHeader("Content-Disposition", "inline; filename=" + file.getName()); + response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8")); try (FileInputStream fis = new FileInputStream(file); OutputStream os = response.getOutputStream()) { @@ -356,16 +384,20 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService { os.write(buffer, 0, bytesRead); } } - return Result.ok("图片预览成功"); } catch (Exception e) { - return Result.error("图片预览失败: " + e.getMessage()); + try { + response.setContentType("application/json; charset=UTF-8"); + response.getWriter().write("{\"status\":500,\"msg\":\"图片预览失败: " + e.getMessage() + "\"}"); + } catch (IOException ex) { + ex.printStackTrace(); + } } } - private Result previewText(File file, HttpServletResponse response) { + private void previewText(File file, HttpServletResponse response) { try { response.setContentType("text/plain; charset=UTF-8"); - response.setHeader("Content-Disposition", "inline; filename=" + file.getName()); + response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8")); try (FileInputStream fis = new FileInputStream(file); OutputStream os = response.getOutputStream()) { @@ -375,22 +407,30 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService { os.write(buffer, 0, bytesRead); } } - return Result.ok("文本预览成功"); } catch (Exception e) { - return Result.error("文本预览失败: " + e.getMessage()); + try { + response.setContentType("application/json; charset=UTF-8"); + response.getWriter().write("{\"status\":500,\"msg\":\"文本预览失败: " + e.getMessage() + "\"}"); + } catch (IOException ex) { + ex.printStackTrace(); + } } } - private Result previewOffice(File file, HttpServletResponse response) { - // Office文件预览比较复杂,这里返回提示信息 - return Result.error("Office文件预览功能暂未实现,请下载后查看"); + private void previewOffice(File file, HttpServletResponse response) { + try { + response.setContentType("application/json; charset=UTF-8"); + response.getWriter().write("{\"status\":500,\"msg\":\"Office文件预览功能暂未实现,请下载后查看\"}"); + } catch (IOException e) { + e.printStackTrace(); + } } - private Result previewVideo(File file, HttpServletResponse response) { + private void previewVideo(File file, HttpServletResponse response) { try { String contentType = getVideoContentType(file.getName()); response.setContentType(contentType); - response.setHeader("Content-Disposition", "inline; filename=" + file.getName()); + response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8")); try (FileInputStream fis = new FileInputStream(file); OutputStream os = response.getOutputStream()) { @@ -400,17 +440,21 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService { os.write(buffer, 0, bytesRead); } } - return Result.ok("视频预览成功"); } catch (Exception e) { - return Result.error("视频预览失败: " + e.getMessage()); + try { + response.setContentType("application/json; charset=UTF-8"); + response.getWriter().write("{\"status\":500,\"msg\":\"视频预览失败: " + e.getMessage() + "\"}"); + } catch (IOException ex) { + ex.printStackTrace(); + } } } - private Result previewAudio(File file, HttpServletResponse response) { + private void previewAudio(File file, HttpServletResponse response) { try { String contentType = getAudioContentType(file.getName()); response.setContentType(contentType); - response.setHeader("Content-Disposition", "inline; filename=" + file.getName()); + response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8")); try (FileInputStream fis = new FileInputStream(file); OutputStream os = response.getOutputStream()) { @@ -420,9 +464,13 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService { os.write(buffer, 0, bytesRead); } } - return Result.ok("音频预览成功"); } catch (Exception e) { - return Result.error("音频预览失败: " + e.getMessage()); + try { + response.setContentType("application/json; charset=UTF-8"); + response.getWriter().write("{\"status\":500,\"msg\":\"音频预览失败: " + e.getMessage() + "\"}"); + } catch (IOException ex) { + ex.printStackTrace(); + } } } diff --git a/web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java b/web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java index f42b8fa..f838342 100644 --- a/web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java +++ b/web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java @@ -79,10 +79,11 @@ public class BusinessDataFileController { return businessDataFileService.reName(fileId, newFileName); } + @ApiOperation(value = "文件预览") @GetMapping("/preview") - public Result preview(@RequestParam("fileId") Long fileId, HttpServletResponse response) { - return businessDataFileService.preview(fileId, response); + public void preview(@RequestParam("fileId") Long fileId, HttpServletResponse response) { + businessDataFileService.preview(fileId, response); } }