From 329b828f1f63e8bbddd74f2dab904563ab4a99ae Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 13 Jan 2019 15:43:54 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/FileDownloader.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/server/core/FileDownloader.js b/server/core/FileDownloader.js index 9feb7a36..455b1658 100644 --- a/server/core/FileDownloader.js +++ b/server/core/FileDownloader.js @@ -6,15 +6,23 @@ class FileDownloader { async load(url, callback) { const maxDownloadSize = 10*1024*1024; + let errMes = ''; + + const response = await got(url, {method: 'HEAD'}); 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) { + errMes = 'file too big'; request.cancel(); } const prog = Math.round(progress.transferred/estSize*100); if (callback) - callback(prog); + callback((prog > 100 ? 100 : prog)); if (prog > 100) estSize *= 1.5; }); @@ -23,10 +31,8 @@ class FileDownloader { try { return (await request).body; } catch (error) { - if (request.isCanceled) { - throw new Error('file too big') - } - throw error; + errMes = (errMes ? errMes : error.message); + throw new Error(errMes); } } }