Browse Source

增加文件预览页面,可直接下载

陈长荣 1 month ago
parent
commit
279d55fb19

+ 2 - 2
src/main/java/com/github/jfcloud/excel/editor/docdeal/controller/FileController.java

@@ -64,7 +64,7 @@ public class FileController {
      * @param response
      */
     @GetMapping("/download")
-    public void download(@RequestParam String name,
+    public void download(@RequestParam(required = false) String name,
                          @RequestParam(required = false) String bucket,
                          @RequestParam(required = false) String url,
                          HttpServletResponse response) {
@@ -86,7 +86,7 @@ public class FileController {
                 return;
             }
 
-            response.setContentLength((int) s3Object.getObjectMetadata().getContentLength());
+            response.setContentLengthLong(s3Object.getObjectMetadata().getContentLength());
 
             String type = "attachment";
             Optional<MediaType> opt = MediaTypeFactory.getMediaType(name);

+ 5 - 0
src/main/java/com/github/jfcloud/excel/editor/docdeal/controller/PreviewController.java

@@ -45,6 +45,11 @@ public class PreviewController {
     @Value("${document.server.url}")
     private String serverUrl;
 
+    @GetMapping("/preview/page")
+    public String previewPage(Model model) {
+        return "/previewPage";
+    }
+
     @GetMapping("/reviewExcel")
     public String reviewExcel(PreviewVo vo, Model model) {
         return reviewDocFile(vo, model);

+ 82 - 0
src/main/resources/templates/previewPage.html

@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8">
+  <meta content="width=device-width, initial-scale=1.0" name="viewport">
+  <title>文件预览工具</title>
+  <style>
+      body {
+          font-family: Arial, sans-serif;
+          margin: 0;
+          display: flex;
+          flex-direction: column;
+          height: 100vh;
+          box-sizing: border-box;
+      }
+
+      .control-bar {
+          display: flex;
+          gap: 10px;
+          padding: 10px;
+          background-color: #f5f5f5;
+          border-radius: 5px;
+      }
+
+      #filename {
+          flex-grow: 1;
+          padding: 8px;
+          border: 1px solid #ddd;
+          border-radius: 4px;
+      }
+
+      #download-btn {
+          padding: 8px 16px;
+          background-color: #4CAF50;
+          color: white;
+          border: none;
+          border-radius: 4px;
+          cursor: pointer;
+      }
+
+      #download-btn:hover {
+          background-color: #45a049;
+      }
+
+      #preview-frame {
+          flex-grow: 1;
+          border: 1px solid #ddd;
+          background-color: #f9f9f9;
+      }
+  </style>
+</head>
+<body>
+<div class="control-bar">
+  <input id="filename" placeholder="输入文件名..." type="text">
+  <button id="download-btn">下载</button>
+</div>
+<iframe id="preview-frame" src="about:blank"></iframe>
+
+<script>
+    document.getElementById('download-btn').addEventListener('click', function () {
+        const filename = document.getElementById('filename').value.trim();
+        if (filename) {
+            window.open(`/download?url=${filename}`, '_blank');
+        } else {
+            alert('请输入有效的文件名');
+        }
+    });
+
+    // 添加回车事件监听器
+    document.getElementById('filename').addEventListener('keypress', function (event) {
+        if (event.key === 'Enter') {
+            const filename = this.value.trim();
+            if (!filename) {
+                return;
+            }
+            let userId = Math.floor(Math.random() * 89) + 10;
+            document.getElementById('preview-frame').src = `/review?url=${filename}&userId=${userId}&userName=游客${userId}`;
+        }
+    });
+</script>
+</body>
+</html>