从内存流上传文件到SFTP

时间:2013-02-13 07:12:13

标签: asp.net c#-4.0 azure sftp

如何从内存流将文件上传到SFTP服务器。从azure blob上传文件后,本地路径不可用。因为我得到了.NET不支持SFTP协议的信息,因此尝试了第三方dll,例如' SharpSSH' Routrek.granados'和' WinSCP'。但没有一个适合我的场景。即put方法不支持bite []或stream。

任何人都可以建议我使用免费的dll,适合我的场景或我可以处理的方式。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以继续使用WinSCP之类的解决方案,但不要尝试使用MemoryStream / byte [],只需先在本地下载文件:

var client = account.CreateCloudBlobClient();
var container = client.GetContainerReference("temp");
var blob = container.GetBlobReferenceFromServer("myblob.zip");

// This assumes you're using a Cloud Service and have a local resource called files
var dropFolder = RoleEnvironment.GetLocalResource("files").RootPath;
var filePath = Path.Combine(dropFolder, "myblob.zip");

// Download blob to a local resource first.
using (var fs = new FileStream(filePath, FileMode.Create))
{
    blob.DownloadToStream(fs);
}

var proc = new Process();
proc.StartInfo.FileName = "winscp.com";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.StandardInput.WriteLine("option batch abort");
proc.StandardInput.WriteLine("option confirm off");
proc.StandardInput.WriteLine("open mysession");
proc.StandardInput.WriteLine("ls");
proc.StandardInput.WriteLine("put " + filePath);
proc.StandardInput.Close();