2016-10-10 122 views
1

我正在嘗試使用ssh2-sftp庫在Node中讀取/寫入文件。當我在sftp站點上對更大的CSV文件(但不是太大 - 如2 MB)執行sftp.get,然後讀取返回的流上的數據時,第14個流之後的呼叫掛在我身上。 (「數據」)呼叫。我已經用幾個不同的示例文件測試過這些代碼,並且代碼在較小的文件上工作正常。但是,如果一個CSV文件足夠大以至於無法通過第14次調用,那麼它就會掛起,就好像它不能再讀取一樣,即使有更多需要閱讀的文件。並且stream.on(「關閉」)也不會被調用。使用ssh2 sftp讀取較大的sftp文件節點

顯然這是非常奇怪的行爲。希望也許有人遇到類似的問題,並使用這個庫,並提供一些指導。

如果有幫助可言,這裏是一些代碼

sftp.get(currentFileName).then((readStream) => { 
    var counter = 0; 

    readStream.on("data", function(d) { 
     counter++; 
     console.log("counter = " + counter); 
    }); 

    readStream.on("close", function(err) { 
     if (err) { 
     console.error("Problem with read stream for file " + currentFileName + ", error = ", err); 
     } 
     //done reading the individual file, all went well 
     else { 
     console.log("done reading the stream"); 
     } 
    }); 

    readStream.on('error', function(e){ 
     console.error("Error retrieving file: " + e); 
    }) 

    readStream.resume(); 

,第14屆呼叫到readStream.on(「數據」)之後,它只是凍結了。也許有一半的文件被讀取。

回答

1

問題原來是ssh2-sftp似乎在運行基礎ssh2庫的過期版本。從ssh2-sftp切換到ssh2的最新(0.5.2)版本並直接使用該庫修復問題(可能是這一個:https://github.com/mscdex/ssh2/issues/450