diff --git a/src/main/java/com/southern/power/grid/controller/DnerEventExportRecordController.java b/src/main/java/com/southern/power/grid/controller/DnerEventExportRecordController.java index d417733..e40ad08 100644 --- a/src/main/java/com/southern/power/grid/controller/DnerEventExportRecordController.java +++ b/src/main/java/com/southern/power/grid/controller/DnerEventExportRecordController.java @@ -8,6 +8,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; + /** * 事件导出记录 - Controller层 * @@ -42,4 +44,9 @@ public class DnerEventExportRecordController { public ResponseEntity download(@PathVariable String id) { return dnerEventExportRecordService.download(id); } + + @GetMapping("/preview/{id}") + public void previewPdf(@PathVariable Long id, HttpServletResponse response) { + dnerEventExportRecordService.previewPdf(id, response); + } } diff --git a/src/main/java/com/southern/power/grid/service/IDnerEventExportRecordService.java b/src/main/java/com/southern/power/grid/service/IDnerEventExportRecordService.java index 02af3d5..84aaf4e 100644 --- a/src/main/java/com/southern/power/grid/service/IDnerEventExportRecordService.java +++ b/src/main/java/com/southern/power/grid/service/IDnerEventExportRecordService.java @@ -6,6 +6,8 @@ import org.springframework.core.io.Resource; import org.springframework.http.ResponseEntity; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; + /** * 事件导出记录 服务接口 * @@ -29,4 +31,12 @@ public interface IDnerEventExportRecordService extends IService download(String id); + + /** + * 预览PDF + * + * @param id 导出记录ID + * @param response 响应体 + */ + void previewPdf(Long id, HttpServletResponse response); } diff --git a/src/main/java/com/southern/power/grid/service/impl/DnerEventExportRecordServiceImpl.java b/src/main/java/com/southern/power/grid/service/impl/DnerEventExportRecordServiceImpl.java index d2a449e..3df4e14 100644 --- a/src/main/java/com/southern/power/grid/service/impl/DnerEventExportRecordServiceImpl.java +++ b/src/main/java/com/southern/power/grid/service/impl/DnerEventExportRecordServiceImpl.java @@ -14,7 +14,13 @@ import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; +import java.io.OutputStream; +import java.net.URLEncoder; import java.time.LocalDateTime; /** @@ -60,4 +66,35 @@ public class DnerEventExportRecordServiceImpl } return FileDownloadUtil.downLoad(record.getFilePath(), record.getFileName()); } + + @Override + public void previewPdf(Long id, HttpServletResponse response) { + DnerEventExportRecord record = getById(id); + File pdfFile = new File(record.getFilePath()); + + if (!pdfFile.exists()) { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + return; + } + + try (FileInputStream fis = new FileInputStream(pdfFile); + BufferedInputStream bis = new BufferedInputStream(fis); + OutputStream os = response.getOutputStream()) { + + // 设置响应头 = 关键:告诉浏览器这是PDF,直接预览 + response.setContentType("application/pdf"); + response.setHeader("Content-Disposition", + "inline;filename=" + URLEncoder.encode(pdfFile.getName(), "UTF-8")); + + // 写出文件流 + byte[] buffer = new byte[1024]; + int len; + while ((len = bis.read(buffer)) != -1) { + os.write(buffer, 0, len); + } + + } catch (Exception e) { + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + } + } } \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 6f4dad5..fb1f2cf 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -9,7 +9,7 @@ spring: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/south_power_grid?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true username: root - password: 123456 + password: 123456 # Nfdw@202510 hikari: connection-timeout: 30000 validation-timeout: 5000