Procházet zdrojové kódy

Замена webdav-fs на webdav

Book Pauk před 5 roky
rodič
revize
81629fab7a

+ 1 - 9
package-lock.json

@@ -1,6 +1,6 @@
 {
   "name": "Liberama",
-  "version": "0.8.1",
+  "version": "0.8.2",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
@@ -12807,14 +12807,6 @@
         }
       }
     },
-    "webdav-fs": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/webdav-fs/-/webdav-fs-2.0.0.tgz",
-      "integrity": "sha512-TjqQKNnf1NuPiMEFJVrmWUYpIEgUxWRktddu5JhQsyxFIOyAJT0cpLyaoOdAp/yrG1yXgDsa6ZL9z+h4Z71zWA==",
-      "requires": {
-        "webdav": "^2.0.0"
-      }
-    },
     "webpack": {
       "version": "4.40.2",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.40.2.tgz",

+ 1 - 1
package.json

@@ -84,7 +84,7 @@
     "vue-router": "^3.1.3",
     "vuex": "^3.1.1",
     "vuex-persistedstate": "^2.5.4",
-    "webdav-fs": "^2.0.0",
+    "webdav": "^2.10.1",
     "zip-stream": "^2.1.2"
   }
 }

+ 3 - 1
server/core/Reader/ReaderWorker.js

@@ -31,7 +31,9 @@ class ReaderWorker {
 
             this.remoteWebDavStorage = false;
             if (config.remoteWebDavStorage) {
-                this.remoteWebDavStorage = new RemoteWebDavStorage(config.remoteWebDavStorage);
+                this.remoteWebDavStorage = new RemoteWebDavStorage(
+                    Object.assign({maxContentLength: config.maxUploadFileSize}, config.remoteWebDavStorage)
+                );
             }
 
             this.periodicCleanDir(this.config.tempPublicDir, this.config.maxTempPublicDirSize, 60*60*1000);//1 раз в час

+ 29 - 43
server/core/RemoteWebDavStorage.js

@@ -1,62 +1,48 @@
 const fs = require('fs-extra');
 const path = require('path');
 
-const WebDavFS = require('webdav-fs');
+const { createClient } = require('webdav');
 
 class RemoteWebDavStorage {
     constructor(config) {
-        const opts = Object.assign({}, config);
-        this.wfs = WebDavFS(config.url, opts);
+        this.config = Object.assign({}, config);
+        this.config.maxContentLength = this.config.maxContentLength || 10*1024*1024;
+        this.wdc = createClient(config.url, this.config);
     }
 
-    stat(filename) {
-        return new Promise((resolve, reject) => {
-            this.wfs.stat(filename, function(err, fileStat) {
-                if (err)
-                    reject(err);
-                resolve(fileStat);
-            });
-        });
+    _convertStat(data) {
+        return {
+            isDirectory: function() {
+                return data.type === "directory";
+            },
+            isFile: function() {
+                return data.type === "file";
+            },
+            mtime: (new Date(data.lastmod)).getTime(),
+            name: data.basename,
+            size: data.size || 0
+        };
     }
 
-    writeFile(filename, data) {
-        return new Promise((resolve, reject) => {
-            this.wfs.writeFile(filename, data, 'binary', function(err) {
-                if (err)
-                    reject(err);
-                resolve();
-            });
-        });
+    async stat(filename) {
+        const stat = await this.wdc.stat(filename);
+        return this._convertStat(stat);
     }
 
-    unlink(filename) {
-        return new Promise((resolve, reject) => {
-            this.wfs.unlink(filename, function(err) {
-                if (err)
-                    reject(err);
-                resolve();
-            });        
-        });
+    async writeFile(filename, data) {
+        return await this.wdc.putFileContents(filename, data, { maxContentLength: this.config.maxContentLength })
     }
 
-    readFile(filename) {
-        return new Promise((resolve, reject) => {
-            this.wfs.readFile(filename, 'binary', function(err, data) {
-                if (err)
-                    reject(err);
-                resolve(data);
-            });        
-        });
+    async unlink(filename) {
+        return await this.wdc.deleteFile(filename);
     }
 
-    mkdir(dirname) {
-        return new Promise((resolve, reject) => {
-            this.wfs.mkdir(dirname, function(err) {
-                if (err)
-                    reject(err);
-                resolve();
-            });
-        });
+    async readFile(filename) {
+        return await this.wdc.getFileContents(filename, { maxContentLength: this.config.maxContentLength })
+    }
+
+    async mkdir(dirname) {
+        return await this.wdc.createDirectory(dirname);
     }
 
     async putFile(filename) {