大佬教程收集整理的这篇文章主要介绍了javascript – 使用Node.js和SSH2从SFTP服务器读取文件,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果重要,该文件的类型为zip.当我尝试解压缩文件(在Node.js中并手动)后,将其读取到缓冲区后,它无法正常工作.
调查后我发现:
>当我在文件上使用readdir时,文件的大小是正确的.
>使用FTP(JSFTp)对我的开发FTP服务器使用上面相同的技术工作正常.
任何建议表示赞赏!
这是我的代码:
var Client = require('ssh2').Client; var m_ssh2Credentials = { host: config.ftpHostName,port: config.ftpPort,username: config.ftpUser,password: config.ftppassword,readyTimeout: 20000,algorithms: { cipher: ["3des-cbc","aes256-cbc","aes192-cbc","aes128-cbc"]} }; ... var conn = new Client(); var dataLength = 0; conn.on('ready',function() { conn.sftp(function(err,sftp) { if (err) { writeToErrorLog("downloadFile(): Failed to open SFTP connection."); } else { writeToLog("downloadFile(): Opened SFTP connection."); } var streamErr = ""; var dataLength = 0; var stream = sftp.createReadStream(config.ftpPath + "/" + m_fileName) stream.on('data',function(d){ data.push(d); dataLength += d.length; }); .on('error',function(E){ streamErr = e; }) .on('close',function(){ if(streamErr) { writeToErrorLog("downloadFile(): Error retrieving the file: " + streamErr); } else { writeToLog("downloadFile(): No error using read stream."); m_fileBuffer = Buffer.concat(data,dataLength); writeToLog("Data length: " + dataLength); writeToLog("downloadFile(): File saved to buffer."); } conn.end(); }); }) }) .on('error',function(err) { writeToErrorLog("downloadFile(): Error connecTing: " + err); }).connect(m_ssh2Credentials);
工作代码:
sftp.open(config.ftpPath + "/" + m_filename,"r",function(err,fd) { sftp.fstat(fd,stats) { var bufferSize = stats.size,chunkSize = 16384,buffer = new Buffer(bufferSizE),bytesRead = 0,errorOccured = false; while (bytesRead < bufferSize && !errorOccured) { if ((bytesRead + chunkSizE) > bufferSizE) { chunkSize = (bufferSize - bytesRead); } sftp.read(fd,buffer,bytesRead,chunkSize,callBACkFunc); bytesRead += chunkSize; } var @R_786_10586@lBytesRead = 0; function callBACkFunc(err,buf,pos) { if(err) { writeToErrorLog("downloadFile(): Error retrieving the file."); errorOccured = true; sftp.close(fd); } @R_786_10586@lBytesRead += bytesRead; data.push(buf); if(@R_786_10586@lBytesRead === bufferSizE) { m_fileBuffer = Buffer.concat(data); writeToLog("downloadFile(): File saved to buffer."); sftp.close(fd); m_eventEmitter.emit('downloadFile_Complete'); } } });
以上是大佬教程为你收集整理的javascript – 使用Node.js和SSH2从SFTP服务器读取文件全部内容,希望文章能够帮你解决javascript – 使用Node.js和SSH2从SFTP服务器读取文件所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。