在节点中管道大数据

时间:2018-02-05 09:14:49

标签: javascript node.js fs

我想下载一个大约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 个答案:

答案 0 :(得分:0)

缓冲区大小限制为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
 })