2009-05-08 16 views
5

¿Es posible cargar un archivo directamente en una carpeta de cuenta ftp con ASP.NET?cargar a ftp asp.net

E.g. Hago clic en navegar, selecciono un archivo para cargar y cuando hago clic en el botón "cargar", debe guardarlo directamente en la carpeta de otro servidor web ubicado en otro lugar que no sea el servidor que se está utilizando para cargar.

Respuesta

0

EDITAR

En primer lugar el signo @ está allí para marcar la cadena como un literal. te ahorra tener que escapar de personajes como barras diagonales inversas. p.ej.

string path = "Z:\\Path\\To\\File.txt"; 
string path = @"Z:\Path\To\File.txt"; 

En segundo lugar, si sólo tiene acceso FTP a otro servidor, entonces puede tomar, la FileUpload.FileBytes propiedad del control FileUpload. Eso le dará un byte[] del contenido del archivo.

De esto usted usa el System.Net.FtpWebRequest & System.Net.FtpWebResponse para cargar su archivo a la Cuenta FTP.

Theres aquí algunos ejemplos de código en VB.NET, pero debería ser bastante fácil para que usted pueda averiguar

http://www.programmingforums.org/thread15954.html

ORIG control de carga

el archivo, deberá proporcionarle el archivo en su servidor web.

Depende de usted, copiar/guardar ese archivo luego desde el servidor web al servidor en el que está alojado el FTP.

Tiene una unidad UNC Path/Mapped Drive compartida en su otro servidor que puede guardar.

El control FileUpload tiene un método .SaveAs() lo que es sólo una simple cuestión de

if (FileUpload1.HasFile) 
try 
{ 
    FileUpload1.SaveAs(@"Z:\Path\On\Other\Server\" + FileUpload1.FileName); 
} 
+0

gracias por la respuesta .. ¿Me puede decir lo que el signo @ se utiliza para? y si puedo usar una dirección IP en lugar de una ruta física, ya que la página web estará en un servidor diferente del servidor en el que subiré los archivos ... por ej. fpt.mydomain.com/images y en ese caso, si esto se puede hacer, es probable que necesite proporcionar credenciales de usuario ¿no? ¿si es así, cómo? –

+1

El sitio @ crea una cadena vertabum, básicamente elimina la necesidad de escapar \ as \\ –

+0

O al pie de la letra, incluso;) –

0

No puedes subirlo a un FTP directamente desde el formulario HTML. Sin embargo, puede cargarlo en su aplicación ASP.NET y luego cargarlo al FTP desde allí usando FtpWebRequest.

4

Como entiendo su pregunta, ¿desea cargar el archivo a otro servidor remoto (para que no sea otro servidor que se encuentre en la misma red que su servidor web)? En ese caso, puedes hacer un par de cosas diferentes. La forma más fácil es tal vez a empezar por hacer un archivo normal que subir su servidor, y luego hacer que el servidor envía el archivo a través de FTP a otro servidor remoto:

string fileName = Path.Combine("<path on your server", FileUpload1.FileName); 
FileUpload1.SaveAs(fileName); 
using(System.Net.WebClient webClient = new System.Net.WebClient()) 
{ 
    webClient.UploadFile(
     New Uri("ftp://remoteserver/remotepath/" + FileUpload1.FileName), 
     localFile); 
} 

... o que podría funcionar hacerlo en un paso:

using(System.Net.WebClient webClient = new System.Net.WebClient()) 
{ 
    webClient.UploadData(
     New Uri("ftp://remoteserver/remotepath/" + FileUpload1.FileName), 
     FileUpload1.FileBytes); 
} 

(me di no probar este código, por lo que puede haber algunos errores en ella ...)

actualización: me di cuenta de que estaba equivocado al suponer que los métodos UploadXXX de WebClient fueron estáticos ...

4

Puede usar la clase WebClient para almacenar el archivo cargado en FTP (sin guardarlo como un archivo en el servidor). Algo como esto:

string name = Path.GetFileName(UploadControl.FileName); 
byte[] data = UploadControl.FileBytes; 

using (WebClient client = new WebClient()) { 
    client.UploadData("ftp://my.ftp.server.com/myfolder/" + name, data); 
} 
+0

Esto definitivamente no funciona para mi aplicación web ASP.NET. Me pregunto por qué esta es una solución tan popular cuando ni siquiera puedo hacer que funcione. ¡Muy frustrante! >. < – Chiramisu

+0

@Chiramisu: Hay varias razones posibles por las que no funciona en su caso, pero el método funciona en las circunstancias correctas. Solo se trata de descubrir qué es lo que le impide funcionar. – Guffa

+0

Me sorprende que hayas respondido a un hilo tan viejo, pero gracias. He intentado cargar un archivo a FTP desde hace días. ¿Sería tan amable de echar un vistazo a mi [pregunta] (http://stackoverflow.com/questions/7744447/desperate-ftp-fileupload-wrong-client-path) sobre el asunto? – Chiramisu

4
/// <summary> 
    /// Example call : if (FtpUpload(FileUploadControl1, "ftp.my.com/somePathDir", @"user", "pass!", "domain")) 
    /// </summary> 
    /// <param name="file"></param> 
    /// <param name="ftpServer"></param> 
    /// <param name="username"></param> 
    /// <param name="ftpPass"></param> 
    /// <returns></returns> 
    private bool FtpUpload(FileUpload file, string ftpServer, string username, string ftpPass, string domainName = "") 
    { 
     // ftp://domain\user:[email protected]/url-path 
     // If you are a member of a domain, then "ftp://domain-name\username:[email protected]" may fail because the backslash (\) is sent in as a literal character and Internet Explorer incorrectly looks for a file instead of parsing a Web address. Changing the backslash (\) in the domain-name\username to domainname%5Cusername works correctly. 

     try 
     { 
      string ftpAddres; 
      if (domainName != string.Empty) 
       ftpAddres = "ftp://" + domainName + @"%5C" + username + ":" + ftpPass + "@" + ftpServer + "/" + file.FileName; 
      else 
       ftpAddres = "ftp://" + username + ":" + ftpPass + "@" + ftpServer + "/" + file.FileName; 

      using (var webClient = new System.Net.WebClient()) 
      { 
       webClient.UploadData(new Uri(ftpAddres), file.FileBytes); 
      } 

     } 
     catch (Exception e) 
     { 
      throw new Exception(e.Message, e); 
     } 
     return true; 
    }