Ken*_*Ken 6 .net streaming sftp sharpssh
我正在尝试使用SharpSSH从远程SFTP服务器获取文件,我想将其作为流读出.
我发现:
class Sftp,有一个Get方法将它保存到本地文件 - 关闭
class SshStream,可能会做我想要的,但似乎脱节,Sftp所以我可能必须自己实现SFTP部分(??)
class ChannelSftp,它实现了SFTP方法get(String, OutputStream),这看起来很完美,除了它是一个低级类,对我来说如何甚至实例化它都不是很明显
看起来如果Sftp的ChannelSftp SftpChannel财产是不是私人的,我可以使用,一切都将是完美的.不过,如果可能的话,我想避免攻击SharpSSH.
我错过了什么吗?
我解决了一些问题并对其进行了测试.尝试一下,随时按下API.
首先,您需要找到一种方法,该方法允许您利用ChannelSftp调用OutputStreams而不是目标文件名的方法.如果您不想使用反射来执行此操作,请将此方法添加到Sftp类并重新编译SharpSSH.
public void GetWithStream(string fromFilePath, Tamir.SharpSsh.java.io.OutputStream stream)
{
cancelled = false;
SftpChannel.get(fromFilePath, stream, m_monitor);
}
Run Code Online (Sandbox Code Playgroud)
接下来,为Stream与之兼容的类创建一个包装器,Tamir.SharpSsh.java.io.OutputStream如下所示:
using System.IO;
using Tamir.SharpSsh.java.io;
public class GenericSftpOutputStream : OutputStream
{
Stream stream;
public GenericSftpOutputStream(Stream stream)
{
this.stream = stream;
}
public override void Write(byte[] buffer, int offset, int count)
{
stream.Write(buffer, offset, count);
}
public override void Flush()
{
stream.Flush();
}
public override void Close()
{
stream.Close();
}
public override bool CanSeek
{
get { return stream.CanSeek; }
}
public override long Seek(long offset, SeekOrigin origin)
{
return stream.Seek(offset, origin);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (this.stream != null)
{
this.stream.Dispose();
this.stream = null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用这些成分,您现在可以使用OpenSSH将其数据流式传输到您选择的流中,如下所示FileStream.
使用System.IO; 使用Tamir.SharpSsh;
class Program
{
static void Main(string[] args)
{
var host = "hostname";
var user = "username";
var pass = "password";
var file = "/some/remote/path.txt";
var saveas = @"C:\some\local\path";
var client = new Sftp(host, user, pass);
client.Connect();
using (var target = new GenericSftpOutputStream(File.Open(saveas, FileMode.OpenOrCreate)))
{
client.GetWithStream(file, target);
}
client.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4949 次 |
| 最近记录: |