Con la siguiente clase de ejemplo vamos a poder realizar operaciones de cliente FTP. Podremos hacer los siguientes tipos de petición:
- Eliminar un fichero
- Comprobar si existe un objeto
- Crear un directorio
- Subir un fichero
El código es el siguiente:
Imports System.Net.FtpWebRequest
Imports System.Net
Imports System.IO
Public Class Ftp
Dim host, user, pass As String
Public Sub New(ByVal host As String, ByVal user As String, ByVal pass As String)
Me.host = host
Me.user = user
Me.pass = pass
End Sub
Public Function eliminarFichero(ByVal fichero As String) As String
Dim peticionFTP As FtpWebRequest
' Creamos una petición FTP con la dirección del fichero a eliminar
peticionFTP = CType(WebRequest.Create(New Uri(fichero)), FtpWebRequest)
' Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = New NetworkCredential(user, pass)
' Seleccionamos el comando que vamos a utilizar: Eliminar un fichero
peticionFTP.Method = WebRequestMethods.Ftp.DeleteFile
peticionFTP.UsePassive = False
Try
Dim respuestaFTP As FtpWebResponse
respuestaFTP = CType(peticionFTP.GetResponse(), FtpWebResponse)
respuestaFTP.Close()
' Si todo ha ido bien, devolvemos String.Empty
Return String.Empty
Catch ex As Exception
' Si se produce algún fallo, se devolverá el mensaje del error
Return ex.Message
End Try
End Function
Public Function existeObjeto(ByVal dir As String) As Boolean
Dim peticionFTP As FtpWebRequest
' Creamos una peticion FTP con la dirección del objeto que queremos saber si existe
peticionFTP = CType(WebRequest.Create(New Uri(dir)), FtpWebRequest)
' Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = New NetworkCredential(user, pass)
' Para saber si el objeto existe, solicitamos la fecha de creación del mismo
peticionFTP.Method = WebRequestMethods.Ftp.GetDateTimestamp
peticionFTP.UsePassive = False
Try
' Si el objeto existe, se devolverá True
Dim respuestaFTP As FtpWebResponse
respuestaFTP = CType(peticionFTP.GetResponse(), FtpWebResponse)
Return True
Catch ex As Exception
' Si el objeto no existe, se producirá un error y al entrar por el Catch
' se devolverá falso
Return False
End Try
End Function
Public Function creaDirectorio(ByVal dir As String) As String
Dim peticionFTP As FtpWebRequest
' Creamos una peticion FTP con la dirección del directorio que queremos crear
peticionFTP = CType(WebRequest.Create(New Uri(dir)), FtpWebRequest)
' Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = New NetworkCredential(user, pass)
' Seleccionamos el comando que vamos a utilizar: Crear un directorio
peticionFTP.Method = WebRequestMethods.Ftp.MakeDirectory
Try
Dim respuesta As FtpWebResponse
respuesta = CType(peticionFTP.GetResponse(), FtpWebResponse)
respuesta.Close()
' Si todo ha ido bien, se devolverá String.Empty
Return String.Empty
Catch ex As Exception
' Si se produce algún fallo, se devolverá el mensaje del error
Return ex.Message
End Try
End Function
Public Function subirFichero(ByVal fichero As String, ByVal destino As String, _
ByVal dir As String) As String
Dim infoFichero As New FileInfo(fichero)
Dim uri As String
uri = destino
' Si no existe el directorio, lo creamos
If Not existeObjeto(dir) Then
creaDirectorio(dir)
End If
Dim peticionFTP As FtpWebRequest
' Creamos una peticion FTP con la dirección del fichero que vamos a subir
peticionFTP = CType(FtpWebRequest.Create(New Uri(destino)), FtpWebRequest)
' Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = New NetworkCredential(user, pass)
peticionFTP.KeepAlive = False
peticionFTP.UsePassive = False
' Seleccionamos el comando que vamos a utilizar: Subir un fichero
peticionFTP.Method = WebRequestMethods.Ftp.UploadFile
' Especificamos el tipo de transferencia de datos
peticionFTP.UseBinary = True
' Informamos al servidor sobre el tamaño del fichero que vamos a subir
peticionFTP.ContentLength = infoFichero.Length
' Fijamos un buffer de 2KB
Dim longitudBuffer As Integer
longitudBuffer = 2048
Dim lector As Byte() = New Byte(2048) {}
Dim num As Integer
' Abrimos el fichero para subirlo
Dim fs As FileStream
fs = infoFichero.OpenRead()
Try
Dim escritor As Stream
escritor = peticionFTP.GetRequestStream()
' Leemos 2 KB del fichero en cada iteración
num = fs.Read(lector, 0, longitudBuffer)
While (num <> 0)
' Escribimos el contenido del flujo de lectura en el
' flujo de escritura del comando FTP
escritor.Write(lector, 0, num)
num = fs.Read(lector, 0, longitudBuffer)
End While
escritor.Close()
fs.Close()
' Si todo ha ido bien, se devolverá String.Empty
Return String.Empty
Catch ex As Exception
' Si se produce algún fallo, se devolverá el mensaje del error
Return ex.Message
End Try
End Function
End Class
El método subirFichero recibe tres argumentos:
fichero
: Ruta local del ficherodestino
: Dirección FTP del destino del fichero. Ej: “ftp://direccion_de_ejemplo/directorio/fichero.txt
“dir
: Dirección FTP del directorio donde se almacenará el fichero. Ej: “ftp://direccion_de_ejemplo/directorio
“