FileDownloader.js 824 B

12345678910111213141516171819202122232425262728293031323334
  1. const got = require('got');
  2. class FileDownloader {
  3. constructor() {
  4. }
  5. async load(url, callback) {
  6. const maxDownloadSize = 10*1024*1024;
  7. let estSize = 100000;
  8. const request = got(url).on('downloadProgress', progress => {
  9. if (progress.transferred > maxDownloadSize) {
  10. request.cancel();
  11. }
  12. const prog = Math.round(progress.transferred/estSize*100);
  13. if (callback)
  14. callback(prog);
  15. if (prog > 100)
  16. estSize *= 1.5;
  17. });
  18. try {
  19. return (await request).body;
  20. } catch (error) {
  21. if (request.isCanceled) {
  22. throw new Error('file too big')
  23. }
  24. throw error;
  25. }
  26. }
  27. }
  28. module.exports = FileDownloader;