瀏覽代碼

Добавлен класс для чтения zip-архивов

Book Pauk 2 年之前
父節點
當前提交
16e10a84ce
共有 1 個文件被更改,包括 57 次插入0 次删除
  1. 57 0
      server/core/ZipReader.js

+ 57 - 0
server/core/ZipReader.js

@@ -0,0 +1,57 @@
+const StreamZip = require('node-stream-zip');
+
+class ZipReader {
+    constructor() {
+        this.zip = null;
+    }
+
+    checkState() {
+        if (!this.zip)
+            throw new Error('Zip closed');
+    }
+
+    async open(zipFile) {
+        if (this.zip)
+            throw new Error('Zip file already open');
+
+         const zip = new StreamZip.async({file: zipFile});
+         
+         this.zipEntries = await zip.entries();
+
+         this.zip = zip;
+    }
+
+    get entries() {
+        this.checkState();
+
+        return this.zipEntries;
+    }
+
+    async extractToBuf(entryFilePath) {
+        this.checkState();
+
+        return await this.zip.entryData(entryFilePath);
+    }
+
+    async extractToFile(entryFilePath, outputFile) {
+        this.checkState();
+
+        await this.zip.extract(entryFilePath, outputFile);
+    }
+
+    async extractAllToDir(outputDir) {
+        this.checkState();
+
+        await this.zip.extract(null, outputDir);
+    }
+
+    close() {
+        if (this.zip) {
+            this.zip.close();
+            this.zip = null;
+            this.zipEntries = null;
+        }
+    }
+}
+
+module.exports = ZipReader;