From bab852804ba2aa1dc23385e62f6873ccdbd73ccf Mon Sep 17 00:00:00 2001
From: Tevin <tingquanren@163.com>
Date: Sun, 17 Jul 2022 10:23:55 +0800
Subject: [PATCH] 优化文件存储服务,提供列队批量操作

---
 common/Bridge.js |   82 ++++++++++++++++++++++++++++++++++++++---
 1 files changed, 76 insertions(+), 6 deletions(-)

diff --git a/common/Bridge.js b/common/Bridge.js
index 8514c83..cf2b376 100644
--- a/common/Bridge.js
+++ b/common/Bridge.js
@@ -222,11 +222,16 @@
     /* ----- 文件系统 ----- */
 
     /**
-     * 保存文件 base64 到 java
+     * 保存文件到 java 端,并返回文件名
      * @param objUrl
      * @param callback
      */
-    fileSave(objUrl, callback) {
+    fileSave(objUrl = '', callback) {
+        // 非 ObjectURL 跳过
+        if (objUrl.indexOf('blob:') < 0) {
+            callback(objUrl);
+            return;
+        }
         // 分段存储
         const saveFileChunk = (baseData, index) => {
             const writeData = {
@@ -262,9 +267,10 @@
      * @param fileName
      * @param callback
      */
-    fileLoad(fileName, callback) {
+    fileLoad(fileName = '', callback) {
+        // 非存储地址,跳过
         if (fileName.indexOf('bridge:') < 0) {
-            callback('');
+            callback(fileName);
             return;
         }
         fileName = fileName.split(':')[1];
@@ -279,6 +285,10 @@
                 length: chunkSize,
             };
             this.invoking('img_read', loadData, res => {
+                if (res.result === false) {
+                    Tools.toast(res.msg);
+                    return;
+                }
                 if (totalSize === 0) {
                     totalSize = res.totalSize;
                     totalCount = Math.ceil(res.totalSize / chunkSize);
@@ -303,15 +313,75 @@
         loadFileChunk(0);
     }
 
-    fileRemove(fileName) {
+    /**
+     * 从 java 端移除文件
+     * @param fileName
+     */
+    fileRemove(fileName = '') {
         if (fileName.indexOf('bridge:') < 0) {
-            callback('');
             return;
         }
         fileName = fileName.split(':')[1];
         this.invoking('img_del', { fileName });
     }
 
+    /**
+     * 文件存储批量操作服务
+     * @param type
+     * @param names
+     * @param callback
+     */
+    fileStorehouse(type, names = [], callback) {
+        // 保存
+        if (type === 'save') {
+            const list = [];
+            const save = index => {
+                this.fileSave(names[index], fileName => {
+                    list.push(fileName);
+                    // 递归下一个
+                    if (index < names.length - 1) {
+                        setTimeout(() => {
+                            save(index + 1);
+                        }, 10);
+                    }
+                    // 完成
+                    else {
+                        callback && callback(list);
+                    }
+                });
+            };
+            save(0);
+        }
+        // 读取
+        else if (type === 'load') {
+            const list = [];
+            const load = index => {
+                this.fileLoad(names[index], objUrl => {
+                    list.push(objUrl);
+                    // 递归下一个
+                    if (index < names.length - 1) {
+                        setTimeout(() => {
+                            load(index + 1);
+                        }, 10);
+                    }
+                    // 完成
+                    else {
+                        callback && callback(list);
+                    }
+                });
+            };
+            load(0);
+        }
+        // 移除
+        else if (type === 'remove') {
+            names.forEach((name, index) => {
+                setTimeout(() => {
+                    this.fileRemove(name);
+                }, 10 * index);
+            });
+        }
+    }
+
 }
 
 // 全局服务实例

--
Gitblit v1.9.1