2008-09-17 16 views
61

¿Esta capacidad viene con .Net? Si no, ¿cuál es la mejor biblioteca gratuita? Necesito algo que arroje buenas excepciones cuando hay un problema, y ​​me permite controlar su progreso.¿Cómo cargo un archivo a un servidor SFTP en C#/.NET?

+0

vea también las preguntas [Bibliotecas SFTP para .NET] (http://stackoverflow.com/questions/530330/sftp-libraries-for-net) y [Módulo FTP/SFTP para .NET] (http: // stackoverflow.com/questions/2731967/ftp-sftp-module-for-net) –

+0

Otra alternativa es Renci SSH.NET. – CodesInChaos

Respuesta

22

Editar: esta respuesta es desde hace mucho tiempo y ya no es válida. Ver comentarios

Es posible que desee echar un vistazo a SharpSSH. Es compatible con SFTP fuera de la caja y es OpenSource.

+5

Parece que SharpSSH se basa en bibliotecas Java (JSch y JCE) y examinar el extenso código fuente no me hizo confiar en que esta biblioteca se pueda usar en un entorno de producción. Una pequeña prueba de estrés dio como resultado excepciones inesperadas. –

+1

Desafortunadamente SharpSSH no es compatible y no es muy estable para la producción. Algo comercial como nuestro SFTPBlackbox (http://www.sftp-net.com/) funcionaría mejor. –

+0

Estoy de acuerdo, me parece muy de mala calidad. No me gusta el puerto java "en el lugar" que está sucediendo aquí. – Jeff

0

Desafortunadamente, no está en .NET Framework en sí. Mi deseo es que puedas integrarte con FileZilla, pero no creo que exponga una interfaz. Creo que tienen scripting, pero obviamente no será tan limpio.

He usado CuteFTP en un proyecto que hace SFTP. Expone un componente COM que creé un contenedor .NET. El truco, encontrarás, son los permisos. Se ejecuta maravillosamente con las credenciales de Windows que instaló CuteFTP, pero se ejecuta bajo otras credenciales y requiere permisos para establecerse en DCOM.

30

Tal vez usted puede script/control winscp?

Actualización: WinSCP ahora tiene a .NET library disponible como nuget package que soporta SFTP, SCP y FTPS

+3

Buen punto. Encontré una guía para hacer exactamente eso: http://winscp.net/eng/docs/guide_dotnet – Raithlin

+9

La [última versión] (http://winscp.net/eng/docs/library) ahora incluso tiene compatibilidad con .NET nativo. ! – fretje

+0

Problemas al cargar al directorio remoto no raíz. La documentación dice que debes usar la ruta absoluta del servidor ("d: \ ftproot \ etc"), lo cual es ridículo en mi opinión. Incluso armado con ese conocimiento, nunca pude conseguir que el archivo vaya donde yo quería que fuera. –

0

Para otra opción no libre, intente edtFTPnet/PRO. Tiene soporte completo para SFTP, y también admite FTPS (y, por supuesto, FTP) si es necesario.

6

El siguiente código muestra cómo cargar un archivo a un servidor SFTP utilizando nuestro componente Rebex SFTP.

// create client, connect and log in 
Sftp client = new Sftp(); 
client.Connect(hostname); 
client.Login(username, password); 

// upload the 'test.zip' file to the current directory at the server 
client.PutFile(@"c:\data\test.zip", "test.zip"); 

client.Disconnect(); 

Puede escribir un registro de comunicación completo en un archivo utilizando una propiedad LogWriter de la siguiente manera. La salida de ejemplos (del componente FTP pero la salida SFTP es similar) se puede encontrar en here.

client.LogWriter = new Rebex.FileLogWriter(
    @"c:\temp\log.txt", Rebex.LogLevel.Debug); 

o interceptar la comunicación mediante eventos de la siguiente manera:

Sftp client = new Sftp(); 
client.CommandSent += new SftpCommandSentEventHandler(client_CommandSent); 
client.ResponseRead += new SftpResponseReadEventHandler(client_ResponseRead); 
client.Connect("sftp.example.org"); 

//... 
private void client_CommandSent(object sender, SftpCommandSentEventArgs e) 
{ 
    Console.WriteLine("Command: {0}", e.Command); 
} 

private void client_ResponseRead(object sender, SftpResponseReadEventArgs e) 
{ 
    Console.WriteLine("Response: {0}", e.Response); 
} 

Para más información ver tutorial o download un juicio y se les samples.

+1

Mi prueba limitada de varios clientes .NET SFTP indica que este producto comercial es una buena opción. –

+2

También he usado RebEx antes cuando necesitaba usarlo para un paquete SSIS. Ellos tienen un buen soporte y documentación si lo que busca es una ruta comercial de terceros. –

Cuestiones relacionadas