2013-02-13 2 views
0

Как загрузить файл на SFTP-сервер из потока памяти. Локальный путь недоступен, так как я загружаю файл из azure blob. поскольку я получил информацию о том, что .NET не поддерживает протокол SFTP и так испробовал сторонние DLL, такие как «SharpSSH», «Routrek.granados» и «WinSCP». Но ни один из них не подходит для моего сценария. т.е. bite [] или поток не поддерживаются в методе put.загружать файл в SFTP из потока памяти

Может кто-нибудь предложить мне dlls, которые являются бесплатными и подходят для моего сценария или способа, которым я могу справиться с этим.

Заранее спасибо.

+0

Я не знаю, о бесплатно, но наши SecureBlackbox работы с потоками, включая потоки памяти. –

+0

Является ли бесплатное строгое требование? Несколько коммерческих SFTP-библиотек поддерживают загрузку из потока, например, из Eldos или Rebex SFTP. Следующая ссылка показывает, как это сделать, используя нашу библиотеку: http://www.rebex.net/sftp.net/features/single-file-operations.aspx#stream –

ответ

1

Вы можете продолжать использовать такие решения, как WinSCP, но вместо того, чтобы пытаться использовать MemoryStream/байт [], просто загрузите файл локально первый:

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(); 
Смежные вопросы