Browse Source

Рефакторинг

Book Pauk 6 years ago
parent
commit
329b828f1f
1 changed files with 12 additions and 6 deletions
  1. 12 6
      server/core/FileDownloader.js

+ 12 - 6
server/core/FileDownloader.js

@@ -6,15 +6,23 @@ class FileDownloader {
 
 
     async load(url, callback) {
     async load(url, callback) {
         const maxDownloadSize = 10*1024*1024;
         const maxDownloadSize = 10*1024*1024;
+        let errMes = '';
+
+        const response = await got(url, {method: 'HEAD'});
 
 
         let estSize = 100000;
         let estSize = 100000;
-        const request = got(url).on('downloadProgress', progress => {
+        if (response.headers['content-length']) {
+            estSize = response.headers['content-length'];
+        }
+
+        const request = got(url, {encoding: null}).on('downloadProgress', progress => {
             if (progress.transferred > maxDownloadSize) {
             if (progress.transferred > maxDownloadSize) {
+                errMes = 'file too big';
                 request.cancel();
                 request.cancel();
             }
             }
             const prog = Math.round(progress.transferred/estSize*100);
             const prog = Math.round(progress.transferred/estSize*100);
             if (callback)
             if (callback)
-                callback(prog);
+                callback((prog > 100 ? 100 : prog));
             if (prog > 100)
             if (prog > 100)
                 estSize *= 1.5;
                 estSize *= 1.5;
         });
         });
@@ -23,10 +31,8 @@ class FileDownloader {
         try {
         try {
             return (await request).body;
             return (await request).body;
         } catch (error) {
         } catch (error) {
-            if (request.isCanceled) {
-                throw new Error('file too big')
-            }
-            throw error;
+            errMes = (errMes ? errMes : error.message);
+            throw new Error(errMes);
         }
         }
     }
     }
 }
 }