代码之家  ›  专栏  ›  技术社区  ›  dwalin93

在节点中管道化大数据

  •  0
  • dwalin93  · 技术社区  · 6 年前

    我想下载一个大约900MB的文件。实现此目标的代码如下所示:

    function download(url){
       return new Promise((resolve,reject) =>{
        try{
    
            request(url, function (error, response, body) {
                if (error){
                    reject(error)
                } else{
                   console.log('sucess')
                }
            }).pipe(fs.createWriteStream('./test.zip'))
                .on('finish',() =>{
                    resolve(promObj);
                })
        } catch (error){
            reject(error);
        }
    })
    }
    

    最后,我得到以下错误:

    buffer.js:556
    if (encoding === undefined) return buf.utf8Slice(start, end);
                                         ^
    
    Error: "toString()" failed
    

    经过一些研究,我发现节点缓冲区的大小限制是256MB。

    有没有可能解决这个问题?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Daphoque    6 年前

    缓冲区大小限制为2GB:

     require("buffer").kMaxLength
    
     2147483647
    

    256MB是字符串的限制

    请尝试:

    request(url).pipe(fs.createWriteStream('./test.zip'))
    

    ----编辑----

    request(url).pipe(fs.createWriteStream('./test.zip')).on('finish',() =>{
        // your callback here
     })