浏览代码

进度上传文件方案默认策略改为基于时间的rename策略 另外提供了多个可选策略

sdxiaomu 2 年之前
父节点
当前提交
13a77ace2d
共有 1 个文件被更改,包括 52 次插入11 次删除
  1. 52 11
      src/main/java/com/jfinal/upload/ProgressUploadFileConfig.java

+ 52 - 11
src/main/java/com/jfinal/upload/ProgressUploadFileConfig.java

@@ -1,11 +1,14 @@
 package com.jfinal.upload;
 
 import com.jfinal.kit.StrKit;
+import com.jfinal.kit.TimeKit;
 
 import java.io.File;
+import java.util.Date;
 
 /**
  * 进度上传文件配置
+ *
  * @author 山东小木
  */
 public class ProgressUploadFileConfig {
@@ -13,38 +16,54 @@ public class ProgressUploadFileConfig {
      * 进度上传文件 rename 策略
      * 给了默认实现
      */
-    private static ProgressUploadFileRenameFunc renameFunc = new DefaultProgressUploadFileRenameFunc();
+    private static ProgressUploadFileRenameFunc renameFunc = new TimeProgressUploadFileRenameFunc();
 
     /**
      * 设置自己的策略
+     *
      * @param func
      */
-    public static void setRenameFunc(ProgressUploadFileRenameFunc func){
+    public static void setRenameFunc(ProgressUploadFileRenameFunc func) {
         renameFunc = func;
     }
 
     /**
      * 设置UUID rename策略
      */
-    public static void setUUIDRenameFunc(){
+    public static void setUUIDRenameFunc() {
         renameFunc = new UUIDProgressUploadFileRenameFunc();
     }
 
     /**
+     * 设置基于当前时间格式化的 rename策略
+     */
+    public static void setTimeRenameFunc() {
+        renameFunc = new TimeProgressUploadFileRenameFunc();
+    }
+
+    /**
+     * 设置重名自动计数加1格式化 rename策略
+     */
+    public static void setCountRenameFunc() {
+        renameFunc = new CountProgressUploadFileRenameFunc();
+    }
+
+    /**
      * 获取当前策略
+     *
      * @return
      */
-    public static ProgressUploadFileRenameFunc getRenameFunc(){
-        return renameFunc==null?new DefaultProgressUploadFileRenameFunc():renameFunc;
+    public static ProgressUploadFileRenameFunc getRenameFunc() {
+        return renameFunc == null ? new TimeProgressUploadFileRenameFunc() : renameFunc;
     }
 
     /**
-     * 默认策略实现
+     * rename计数策略实现
      */
-    static class DefaultProgressUploadFileRenameFunc implements ProgressUploadFileRenameFunc {
+    static class CountProgressUploadFileRenameFunc implements ProgressUploadFileRenameFunc {
         @Override
-        public String call(String directory,String originFileName) {
-            File file = new File(directory+"/"+originFileName);
+        public String call(String directory, String originFileName) {
+            File file = new File(directory + "/" + originFileName);
             int count = 1;
             String newFilename = originFileName;
             while (file.exists()) {
@@ -69,13 +88,35 @@ public class ProgressUploadFileConfig {
      */
     static class UUIDProgressUploadFileRenameFunc implements ProgressUploadFileRenameFunc {
         @Override
-        public String call(String directory,String originFileName) {
+        public String call(String directory, String originFileName) {
             int dotIndex = originFileName.lastIndexOf(".");
             String extension = "";
             if (dotIndex != -1) {
                 extension = originFileName.substring(dotIndex);
             }
-            return StrKit.getRandomUUID()+extension;
+            return StrKit.getRandomUUID() + extension;
+        }
+    }
+
+    /**
+     * 内置基于时间的文件名rename策略
+     */
+    static class TimeProgressUploadFileRenameFunc implements ProgressUploadFileRenameFunc {
+        @Override
+        public String call(String directory, String originFileName) {
+            File file;
+            String newFilename = originFileName;
+            do {
+                int dotIndex = originFileName.lastIndexOf(".");
+                newFilename = TimeKit.format(new Date(), "yyyyMMddHHmmssSSS");
+                String extension = "";
+                if (dotIndex != -1) {
+                    extension = originFileName.substring(dotIndex);
+                    newFilename = newFilename + extension;
+                }
+                file = new File(directory + newFilename);
+            } while (file.exists());
+            return newFilename;
         }
     }
 }