5

我正在尝试使用 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 程序集。

谢谢

4

1 回答 1

5

WinSCP .NET 程序集仅在当前 beta 版本 (5.18) 中支持使用流提供远程文件的内容,使用Session.GetFile方法

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);
}
于 2015-10-08T12:11:36.057 回答