Browse Source

文档key使用uuid,避免onlyOffice缓存

陈长荣 3 months ago
parent
commit
86a064df79

+ 4 - 2
pom.xml

@@ -20,6 +20,8 @@
         <java.version>1.8</java.version>
         <nacos.version>2021.0.5.0</nacos.version>
         <mysql.version>8.0.33</mysql.version>
+        <hutool.version>5.8.28</hutool.version>
+        <fastjson.version>1.2.83</fastjson.version>
     </properties>
 
     <dependencies>
@@ -76,13 +78,13 @@
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
-            <version>1.2.83</version>
+            <version>${fastjson.version}</version>
         </dependency>
 
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-http</artifactId>
-            <version>5.8.28</version>
+            <version>${hutool.version}</version>
         </dependency>
 
         <dependency>

+ 2 - 0
src/main/java/com/github/jfcloud/excel/editor/docdeal/bean/Document.java

@@ -42,6 +42,8 @@ public class Document implements Serializable {
     /** 打开文件预览/编辑的链接 */
     //private String refrence;
 
+    private long len;
+
     /** 文档打开方式
     //private String mode;
 

+ 1 - 0
src/main/java/com/github/jfcloud/excel/editor/docdeal/constant/DocumentConstants.java

@@ -24,6 +24,7 @@ public class DocumentConstants {
      * 文档文件下载接口地址
      */
     public static final String OFFICE_API_DOC_FILE = "%s/download?name=%s";
+    public static final String OFFICE_API_DOC_FILE_BUCKET = "%s/download?name=%s&bucket=%s";
     /**
      * 文档信息获取地址
      */

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

@@ -1,10 +1,10 @@
 package com.github.jfcloud.excel.editor.docdeal.controller;
 
-
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.io.file.FileNameUtil;
 import cn.hutool.core.lang.Pair;
 import cn.hutool.core.net.URLEncodeUtil;
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpResponse;
 import cn.hutool.http.HttpUtil;
@@ -112,7 +112,7 @@ public class FileController {
         try {
             if (size < 0) {
                 log.error("文档不存在 name={}, bucket={}", name, bucket);
-                response.getWriter().println("Sorry, we cannot find the file, pls check the file name and try again.");
+                response.getWriter().println("Sorry, we cannot find the file, pls check the file name and try again. --" + System.currentTimeMillis());
                 return;
             }
 
@@ -152,15 +152,15 @@ public class FileController {
 
         title = StrUtil.isBlank(title) ? name : title;
         bucket = StrUtil.isBlank(bucket) ? ossProperties.getBucketName() : bucket;
-
-        String downloadUrl = String.format(DocumentConstants.OFFICE_API_DOC_FILE, serverUrl, name);
-        downloadUrl += "&bucket=" + bucket;
+        String downloadUrl = String.format(DocumentConstants.OFFICE_API_DOC_FILE_BUCKET, serverUrl, name, bucket) + "&_t=" + System.currentTimeMillis();
 
         Document document = Document.builder()
-                .key(FileNameUtil.getPrefix(name))
+                .key(IdUtil.fastSimpleUUID())
                 .title(title)
                 .fileType(FileNameUtil.getSuffix(name))
                 .url(downloadUrl)
+                .storage(bucket)
+                .len(ossTemplate.getSize(bucket, name))
                 .permissions(new JSONObject()
                         .fluentPut("chat", true)
                         .fluentPut("comment", true)
@@ -178,6 +178,7 @@ public class FileController {
                 .build();
         log.info("document: {}", JSON.toJSONString(document));
 
+        //回调接口回传文档名称和存储桶
         DocumentEditParam param = DocumentEditParam.builder()
                 .callbackUrl(String.format(DocumentConstants.OFFICE_API_CALLBACK_BUCKET, serverUrl, name, bucket))
                 .user(new DocumentEditParam.UserBean(userId, userName))

+ 15 - 0
src/main/java/com/github/jfcloud/excel/editor/docdeal/oss/service/OssTemplate.java

@@ -106,6 +106,21 @@ public class OssTemplate implements InitializingBean {
         return apks.isEmpty() ? -1 : apks.get(0).getSize();
     }
 
+    /**
+     * 根据文件名查询bucket
+     */
+    public List<String> findBucketsByObjectName(String objectName) {
+        List<String> buckets = new ArrayList<>();
+        List<Bucket> allBuckets = getAllBuckets();
+        for (Bucket bucket : allBuckets) {
+            List<S3ObjectSummary> objects = amazonS3.listObjects(bucket.getName(), objectName).getObjectSummaries();
+            if (!objects.isEmpty()) {
+                buckets.add(bucket.getName());
+            }
+        }
+        return buckets;
+    }
+
     public void putObject(String bucketName, String objectName, InputStream stream) throws Exception {
         this.putObject(bucketName, objectName, stream, (long) stream.available(), "application/octet-stream");
     }