readerLoader.js 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. const utils = require('./utils');
  2. const fs = require('fs-extra');
  3. const util = require('util');
  4. const stream = require('stream');
  5. const pipeline = util.promisify(stream.pipeline);
  6. const download = require('download');
  7. async function main(url, config, setState) {
  8. const maxDownloadSize = 10*1024*1024;
  9. let errMes = '';
  10. try {
  11. setState({state: 'download', step: 1, totalSteps: 3, url});
  12. const tempFilename = utils.randomHexString(30);
  13. const d = download(url);
  14. d.on('downloadProgress', progress => {
  15. setState({progress: Math.round(progress.percent*100)});
  16. if (progress.transferred > maxDownloadSize) {
  17. errMes = 'file too big';
  18. d.destroy();
  19. }
  20. });
  21. await pipeline(d, fs.createWriteStream(`${config.tempDownloadDir}/${tempFilename}`));
  22. setState({state: 'finish', step: 3, file: tempFilename});
  23. } catch (e) {
  24. setState({state: 'error', error: (errMes ? errMes : e.message)});
  25. }
  26. }
  27. module.exports = main;