使用 WinSCP .NET 程序集以流的形式访问远程文件内容

Access remote file contents as a stream using WinSCP .NET assembly

我正在尝试使用 WinSCP .NET 程序集打开文件以从 SFTP 读取,作为我将文件从 SFTP 存档到 Azure blob 的练习的一部分。

要将 blob 上传到 Azure,我正在使用

using (var fileStream = inputStream)
{
    blockBlob.UploadFromStream(fileStream);
    blobUri = blockBlob.Uri.ToString();
}

如何从 SFTP 服务器上的文件中获取流?

我设法使用 SftpClient 使用以下代码获取流并且它有效但不幸的是无法使用 WinSCP .NET 程序集实现相同的目的。

sftpClient.OpenRead(file.FullName)

任何人都可以帮助我如何使用 WinSCP .NET 程序集实现同样的目标吗?

因为我需要使用用户名、密码和私钥连接到 SFTP,所以我正在使用 WinSCP .NET 程序集。

谢谢

WinSCP .NET 程序集仅在当前测试版 (5.18) 中支持使用流提供远程文件的内容,使用 Session.GetFile method:

using (Stream stream = session.GetFile("/path/file.ext"))
{
    blockBlob.UploadFromStream(stream);
}

对于当前的稳定版本,您所能做的就是使用 Session.GetFileToDirectory(或类似的)将远程文件下载到本地临时位置,然后从那里读取文件:

// Download the remote file to the temporary location
var transfer = session.GetFileToDirectory("/path/file.ext", Path.GetTempPath());

try
{
    // Open the temporarily downloaded file for reading
    using (Stream stream = File.OpenRead(transfer.Destination))
    {
        // use the stream
        blockBlob.UploadFromStream(stream);
        blobUri = blockBlob.Uri.ToString();
    }
}
finally
{
    // Discard the temporarily downloaded file
    File.Delete(transfer.Destination);
}