2016-10-10 4 views
1

ssh2-sftp 라이브러리를 사용하여 Node에서 파일을 읽고 쓰려고합니다. SFTP 사이트에서 더 큰 CSV 파일 (2MB와 같이 너무 크지는 않음)에서 sftp.get을 수행 한 다음 반환 된 스트림에서 데이터를 읽으면 14 번 스트림 이후에 전화가 끊깁니다. ("데이터") 호출. 몇 가지 다른 샘플 파일을 사용하여이 테스트를 거쳤으며 코드는 작은 파일에서도 잘 작동합니다. 그러나 CSV 파일이 14 번째 전화를 지나기에 충분히 크다면, 그냥 멈추고 읽을 것이 더 많아도 더 이상 읽을 수없는 것 같습니다. 그리고 stream.on ("close")도 결코 호출되지 않습니다.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(); 

되고 readStream.on로 14 호 ("데이터") 후, 그냥 정지됩니다. 아마도 파일의 절반을 읽었을 것입니다.

답변

1

문제는 ssh2-sftp가 기본 ssh2 라이브러리의 오래된 버전을 실행하고있는 것 같습니다. ssh2-sftp에서 최신 (0.5.2) 버전의 ssh2로 전환하고 해당 라이브러리를 사용하여 직접 문제를 해결했습니다 (https://github.com/mscdex/ssh2/issues/450 일 수 있음)