Download large data stream (> 1Gb) using javascript

前端 未结 2 375
感情败类
感情败类 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:35

    Following @guest271314's advice, I added StreamSaver.js to my project, and I successfully received files bigger than 1GB on Chrome. According to the documentation, it should work for files up to 15GB but my browser crashed before that (maximum file size was about 4GB for me).

    Note I: to avoid the Blob max size limitation, I also tried to manually append data to the href field of a <a></a> but it failed with files of about 600MB ...

    Note II: as amazing as it might seem, the basic technic using createObjectURL works perfectly fine on Firefox for files up to 4GB !!

    0 讨论(0)
  • 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'); });
    
    0 讨论(0)
提交回复
热议问题