download.ts 762 B

1234567891011121314151617181920212223
  1. import path from 'path';
  2. import fs from 'graceful-fs';
  3. import mkdirp from 'mkdirp';
  4. import streamToPromise from 'stream-to-promise';
  5. import { Readable, Writable, Transform } from 'stream';
  6. import axios from '~/utils/axios';
  7. export async function downloadTo(url: string, outDir: string, fileName: string, transform: Transform|null = null): Promise<void> {
  8. // get
  9. const response = await axios.get(url, { responseType: 'stream' });
  10. // mkdir -p
  11. mkdirp.sync(outDir);
  12. // replace and write
  13. let stream: Readable = response.data;
  14. if (transform != null) {
  15. stream = stream.pipe(transform);
  16. }
  17. const file = path.join(outDir, fileName);
  18. const writeStream: Writable = stream.pipe(fs.createWriteStream(file));
  19. return streamToPromise(writeStream);
  20. }