2014-05-17 137 views
0

我试图使用SSH在客户端浏览器和远程服务器('云')之间发送文件。为此,我开发了一个Node.js网络服务器作为中间人。对于文件上传,我的节点网络服务器接收来自用户的请求并使用ssh2模块将其传送到远程服务器。以下是代码片段。文件上传的作品完美:从服务器到客户端的文件传输Node.js

var readStream = fs.createReadStream("filename.txt"); // on client's local computer 
var writeStream = sftp.createWriteStream("/path/to/file/filename.txt"); // on the remote server 

writeStream.on('close', function() { 
    console.log("- file transferred to cloud"); 
    sftp.end(); 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    response.end("The file has been successfully uploaded to the cloud!"); 
}); 
readStream.pipe(writeStream); 

所以我尝试用同样的想法来传输文件的另一种方法:从远程服务器到客户端,这里是我的代码:

var readStream = sftp.createReadStream("/path/to/file/filename.txt"); // on remote server 
var writeStream = fs.createWriteStream("path/filename.txt"); // on the client's local computer server 

writeStream.on('close', function() { 
    console.log("- file transferred to cloud"); 
    sftp.end(); 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    response.end("The file has been successfully uploaded to the cloud!"); 
}); 
readStream.pipe(writeStream); 

的问题是服务器上的文件确实被读取并且在客户端创建了一个文件 - 但它没有数据!我无法弄清楚为什么数据不会从服务器传输到客户端,但是如果我将文件从客户端传输到服务器,同样的方法也可以工作。

任何帮助将不胜感激!

回答

1

请尝试使用sftp.fastGet()sftp.fastPut()方法。他们使用不同的实现,并且更快,因为他们管道读取/写入。

+1

我试过了,我得到'权限被拒绝'...虽然我很确定我已经读取了服务器上的文件。 – AliKhokhar

相关问题