[ASP.NET] Subiendo un archivo a un servidor FTP con un FileUpload

Posted on


Hace poco me preguntaban en el blog sobre como era posible subir un archivo a un servidor FTP utilizando el FileUpload de ASP.NET, esto se dio ya que tenia un post en el cual mostraba como poder usar ese control (mira el post acá), así que en esta entrada deseo responder a esa pregunta.

Lo primero a tener en cuenta es que el control fileupload no funciona nativamente con el protocolo FTP, sino con el HTTP, así que debemos realiza algunos pequeños cambios y usar alguna clase de .net que nos permita trabajar con FTP; así que manos a la obra, lo primero es diseñar una interfaz para la selección del archivo, y tres campos de texto para el ingreso de:

  • Servidor FTP
  • Usuario
  • Clave

Entonces el HTML de nuestra página sería:

   1:  <h1>Subir archivo a un servidor FTP</h1>
   2:  <hr />
   3:  <fieldset>
   4:      <legend>Configuración FTP</legend>
   5:      <table>
   6:          <tr>
   7:              <td><b>Servidor:</b></td>
   8:              <td><asp:TextBox ID="txtServidor" runat="server" Width="300px"></asp:TextBox></td>
   9:          </tr>
  10:          <tr>
  11:              <td><b>Usuario:</b></td>
  12:              <td><asp:TextBox ID="txtUsuario" runat="server" Width="300px"></asp:TextBox></td>
  13:          </tr>
  14:          <tr>
  15:              <td><b>Clave:</b></td>
  16:              <td><asp:TextBox ID="txtClave" runat="server" Width="300px"></asp:TextBox></td>
  17:          </tr>
  18:          <tr>
  19:              <td><b>Archivo:</b></td>
  20:              <td><asp:FileUpload ID="fileUpload1" runat="server" /></td>
  21:          </tr>
  22:          <tr>
  23:              <td colspan="2">
  24:                  <asp:Button Text="Subir Archivo FTP" runat="server" ID="btnSubirArchivo" onclick="btnSubirArchivo_Click" />
  25:              </td>
  26:          </tr>
  27:      </table>
  28:  </fieldset>

Y ahora el código del evento clic del botón:

   1:  if (fileUpload1.HasFile)
   2:  {
   3:      var server = String.Format("{0}files/{1}", txtServidor.Text, fileUpload1.FileName);
   4:      var user = txtUsuario.Text;
   5:      var pass = txtClave.Text;
   6:   
   7:      var request = WebRequest.Create(server);
   8:      request.Method = WebRequestMethods.Ftp.UploadFile;
   9:      request.Credentials = new NetworkCredential(user, pass);
  10:   
  11:      var sourceStream = new StreamReader(fileUpload1.FileContent);
  12:      var fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
  13:      sourceStream.Close();
  14:      request.ContentLength = fileContents.Length;
  15:   
  16:      var requestStream = request.GetRequestStream();
  17:      requestStream.Write(fileContents, 0, fileContents.Length);
  18:      requestStream.Close();
  19:   
  20:      var response = (FtpWebResponse)request.GetResponse();
  21:      lblEstado.Text = response.StatusDescription;
  22:      response.Close();
  23:  }

Y listo, estamos tomando el archivo del fileupload, pero en este caso utilizamos fileupload1.FileContent.

Espero les sea de utilidad, como siempre les dejo el código del ejemplo, saludos!

Descarga el ejemplo!

About these ads

4 comentarios en “[ASP.NET] Subiendo un archivo a un servidor FTP con un FileUpload

    [...] [ASP.NET] Subiendo un archivo a un servidor FTP con un FileUpload [...]

    Yack escribió:
    09/15/2012 en 15:18

    Buenas Tardes:
    Una consulta al estar codificado el archivo con “Encoding.UTF8″ como hago para luego descargarlo y ver la informacion sin codificar.
    Muchas Gracias

    Resumen Post 2012 « Todo en ASP.NET escribió:
    12/19/2012 en 22:05

    [...] [ASP.NET] Subiendo un archivo a un servidor FTP con un FileUpload [...]

    jose antonio escribió:
    03/28/2014 en 19:56

    la misma pregunta que yack como le hicistes.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s