0

メモリ ストリームから SFTP サーバーにファイルをアップロードするにはどうすればよいですか。Azure BLOB からファイルをアップロードしているため、ローカル パスを使用できません。.NET が SFTP プロトコルをサポートしていないという情報を得たので、「SharpSSH」、「Routrek.granados」、「WinSCP」などのサードパーティの DLL を試しました。しかし、私のシナリオには適していません。つまり、 put メソッドでは bit[] または stream はサポートされていません。

無料で私のシナリオに合った dll や、これを処理できる方法を誰かに提案してもらえますか。

前もって感謝します。

4

1 に答える 1

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();
于 2013-02-13T07:56:48.797 に答える