使用 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);
}
我正在尝试使用 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);
}