2014-01-24 72 views
1

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

我已经采取了相关的一段代码:

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(); 
}); 

没有人有任何想法可能会导致这个问题?

+0

你使用的是什么ssh服务器和ssh服务器版本?另外,你使用的是什么版本的节点? – mscdex

+0

Node.js版本:3.14.5.10, ssh2版本:0.2.17 – NullCrayfish

+0

这有点晚,但您可以尝试ssh2 v0.3.x.它包含对ChannelStream的改进,反过来可以改进SFTP。 – mscdex

回答

1

我已经结束了文件分割成更小的块并发送它们,然后每当一段特定的时间没有进展我重新启动连接并开始传输死亡之前。

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