Download large data stream (> 1Gb) using javascript

前端 未结 2 382
感情败类
感情败类 2020-12-15 22:05

I was wondering if it was possible to stream data from javascript to the browser\'s downloads manager.

Using webrtc, I stream data (from files > 1Gb

2条回答
  •  渐次进展
    2020-12-15 22:40

    if you want to fetch a large file blob from an api or url, you can use streamsaver.

    npm install streamsaver
    

    then you can do something like this

    import { createWriteStream } from 'streamsaver';
    
    export const downloadFile = (url, fileName) => {
      return fetch(url).then(res => {
        const fileStream = createWriteStream(fileName);
        const writer = fileStream.getWriter();
        if (res.body.pipeTo) {
          writer.releaseLock();
          return res.body.pipeTo(fileStream);
        }
    
        const reader = res.body.getReader();
        const pump = () =>
          reader
            .read()
            .then(({ value, done }) => (done ? writer.close() : writer.write(value).then(pump)));
    
        return pump();
      });
    };
    

    and you can use it like this:

    const url = "http://urltobigfile";
    const fileName = "bigfile.zip";
    
    downloadFile(url, fileName).then(() => { alert('done'); });
    

提交回复
热议问题