浏览代码

!104 完善进度上传文件解决方案
Merge pull request !104 from 山东小木/master

JFinal 2 年之前
父节点
当前提交
8c3f3d436e

+ 8 - 0
pom.xml

@@ -106,6 +106,14 @@
 			<scope>provided</scope>
 			<scope>provided</scope>
 		</dependency>
 		</dependency>
 
 
+		<!-- common fileupload 文件上传 -->
+		<dependency>
+			<groupId>commons-fileupload</groupId>
+			<artifactId>commons-fileupload</artifactId>
+			<version>1.5</version>
+			<scope>provided</scope>
+		</dependency>
+
 		<!-- druid 数据源连接池
 		<!-- druid 数据源连接池
 		     注意:从 druid 1.2.5 版本开始,DruidStatViewHandler 中无法使用父类中的 username
 		     注意:从 druid 1.2.5 版本开始,DruidStatViewHandler 中无法使用父类中的 username
 		          与 password,所以升级到比 1.2.4 更高版本时,druid 监控将无法无法通过 jfinal
 		          与 password,所以升级到比 1.2.4 更高版本时,druid 监控将无法无法通过 jfinal

文件差异内容过多而无法显示
+ 301 - 217
src/main/java/com/jfinal/core/Controller.java


+ 122 - 0
src/main/java/com/jfinal/upload/ProgressUploadFileConfig.java

@@ -0,0 +1,122 @@
+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 {
+    /**
+     * 进度上传文件 rename 策略
+     * 给了默认实现
+     */
+    private static ProgressUploadFileRenameFunc renameFunc = new TimeProgressUploadFileRenameFunc();
+
+    /**
+     * 设置自己的策略
+     *
+     * @param func
+     */
+    public static void setRenameFunc(ProgressUploadFileRenameFunc func) {
+        renameFunc = func;
+    }
+
+    /**
+     * 设置UUID rename策略
+     */
+    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 TimeProgressUploadFileRenameFunc() : renameFunc;
+    }
+
+    /**
+     * rename计数策略实现
+     */
+    static class CountProgressUploadFileRenameFunc implements ProgressUploadFileRenameFunc {
+        @Override
+        public String call(String directory, String originFileName) {
+            File file = new File(directory + "/" + originFileName);
+            int count = 1;
+            String newFilename = originFileName;
+            while (file.exists()) {
+                int dotIndex = originFileName.lastIndexOf(".");
+                String extension = "";
+                if (dotIndex != -1) {
+                    extension = originFileName.substring(dotIndex);
+                    newFilename = originFileName.substring(0, dotIndex) + "_" + count + extension;
+                } else {
+                    newFilename = originFileName + "_" + count;
+                }
+                file = new File(directory + newFilename);
+                count++;
+            }
+            return newFilename;
+        }
+    }
+
+
+    /**
+     * UUID 内置实现
+     */
+    static class UUIDProgressUploadFileRenameFunc implements ProgressUploadFileRenameFunc {
+        @Override
+        public String call(String directory, String originFileName) {
+            int dotIndex = originFileName.lastIndexOf(".");
+            String extension = "";
+            if (dotIndex != -1) {
+                extension = originFileName.substring(dotIndex);
+            }
+            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;
+        }
+    }
+}

+ 15 - 0
src/main/java/com/jfinal/upload/ProgressUploadFileRenameFunc.java

@@ -0,0 +1,15 @@
+package com.jfinal.upload;
+
+/**
+ * 进度上传文件 rename 策略func
+ * @author 山东小木
+ */
+public interface ProgressUploadFileRenameFunc {
+    /**
+     * 处理rename
+     * @param directory        文件存放路径
+     * @param originFileName   原文件名
+     * @return                 返回新文件名
+     */
+    public String call(String directory,String originFileName);
+}

+ 53 - 0
src/main/java/com/jfinal/upload/UploadProgress.java

@@ -0,0 +1,53 @@
+package com.jfinal.upload;
+
+/**
+ * 文件上传进度
+ * @author 山东小木
+ */
+public class UploadProgress {
+    /**
+     * 内容顺序第几个
+     */
+    private int itemIndex;
+    /**
+     * 文件总长度
+     */
+    private long contentLength;
+    /**
+     * 当前已读长度
+     */
+    private long bytesRead;
+
+    public UploadProgress() {
+    }
+
+    public UploadProgress(int itemIndex, long contentLength, long bytesRead) {
+        this.itemIndex = itemIndex;
+        this.contentLength = contentLength;
+        this.bytesRead = bytesRead;
+    }
+
+    public int getItemIndex() {
+        return itemIndex;
+    }
+
+    public void setItemIndex(int itemIndex) {
+        this.itemIndex = itemIndex;
+    }
+
+    public long getContentLength() {
+        return contentLength;
+    }
+
+    public void setContentLength(long contentLength) {
+        this.contentLength = contentLength;
+    }
+
+    public long getBytesRead() {
+        return bytesRead;
+    }
+
+    public void setBytesRead(long bytesRead) {
+        this.bytesRead = bytesRead;
+    }
+}