SSH2.SFTP node.js备份脚本冻结大文件

时间:2014-01-24 10:50:06

标签: node.js

我正在尝试创建一个脚本来将文件传输到我的NAS以进行备份。 我正在使用SSH2模块(https://github.com/mscdex/ssh2)来建立SFTP连接。 对于较小的文件一切顺利,对于较大的文件(> 500MB),它通常只在70%到100%完成之间冻结。 我用于传输的fastPut方法突然停止传输,不再触发任何事件。

我已经拿出了相关的代码:

var uploadUpdate=true;

sftp.fastPut(localPath+'/'+upload, receiver.path+'/'+newDir+'/'+upload, {step:function(totalTransferred, chunk, total){
    if(uploadUpdate){ //since this event will be triggered a lot I figured I should keep some time (5 sec) between the logs
        uploadUpdate=false;
        console.log("- Progress '"+upload+"' => "+(Math.floor(totalTransferred/total*10000)/100)+"%, "+totalTransferred+" of "+total+" bytes, chunk: "+chunk);
        setTimeout(function(){
            uploadUpdate=true;
        },5000);
    }
}}, function(err){
    if(err){
        if(!fileErrors[upload]) fileErrors[upload]=0;
        ++fileErrors[upload];

        if(fileErrors[upload]==5)
            console.log("'"+upload+"' failed 5 times... skipping now...");
        else{
            console.log("Upload of '"+upload+"' failed, re-add to queue.");
            uploadsToDo.push(upload);
        }
    }
    nextUpload();
});

有谁知道可能导致此问题的原因是什么?

1 个答案:

答案 0 :(得分:1)

我最终将文件拆分成较小的块并发送它们,然后在特定的时间内没有任何进展我重新启动连接并开始转移它之前死亡的地方。

不是很漂亮,但它完成了工作