Files
tsFluentFTP/ftp.vb

608 lines
34 KiB
VB.net

Imports System.IO
Imports System.Security.Authentication
Imports System.Threading
Imports FluentFTP
Public Class ftp
Public Shared HoraControl As DateTime = Now
Public Shared Function ObtenerFechaDeModificacion(Fichero As String, ServidorFTP As ServidorFTP) As Date
Try
Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado
If ServidorFTP.Pasivo Then
ftp.Config.DataConnectionType = FtpDataConnectionType.PASV
Else
ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive
End If
ftp.Config.RetryAttempts = ServidorFTP.Reintentos
ftp.Config.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
ftp.Config.EncryptionMode = FtpEncryptionMode.None
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None
End Select
ftp.Encoding = System.Text.Encoding.UTF8
If ftp.IsConnected = False Then ftp.Connect()
Return ftp.GetModifiedTime(Fichero)
ftp.Disconnect()
HoraControl = Now
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
Return Nothing
End Function
Public Shared Sub DescargaFichero(Fichero As String, st As Stream, ServidorFTP As ServidorFTP, Optional Progreso As Action(Of FtpProgress) = Nothing)
Try
Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado
If ServidorFTP.Pasivo Then
ftp.Config.DataConnectionType = FtpDataConnectionType.PASV
Else
ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive
End If
ftp.Config.RetryAttempts = ServidorFTP.Reintentos
ftp.Config.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
ftp.Config.EncryptionMode = FtpEncryptionMode.None
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None
End Select
ftp.Encoding = System.Text.Encoding.UTF8
If ftp.IsConnected = False Then ftp.Connect()
If Not ftp.DownloadStream(st, Fichero, , Progreso) Then Throw New Exception("No se ha podido descargar el fichero")
ftp.Disconnect()
HoraControl = Now
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Sub
'Public Shared Async Function DownloadFileAsync() As Task
' Dim token = New CancellationToken()
' Dim cfg As New FtpConfig
' cfg.DataConnectionType = FtpDataConnectionType.PASV
' cfg.EncryptionMode = FtpEncryptionMode.Implicit
' cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
' Using ftp = New AsyncFtpClient("192.168.41.56", "GestionCOAS", "TsCOAS.2019-", 992, cfg)
' Await ftp.Connect(token)
' ' define the progress tracking callback
' Dim progress As Progress(Of FtpProgress) = New Progress(Of FtpProgress)(
' Sub(p)
' If p.Progress = 1 Then
' ' all done!
' Else
' ' percent done = (p.Progress * 100)
' End If
' End Sub)
' ' download a file with progress tracking
' Await ftp.DownloadFile("C:\TMP\PRUEBA.BIN", "/FIRMADOS_COLEGIADOS/0761/0761-100010.002_001.fir", FtpLocalExists.Resume, FtpVerify.None, progress, token)
' End Using
'End Function
Public Shared Async Function DescargaFicheroAsync(Fichero As String, st As Stream, ServidorFTP As ServidorFTP, Optional Progreso As IProgress(Of FtpProgress) = Nothing, Optional ByVal Verificacion As FtpVerify = FtpVerify.None, Optional ct As Threading.CancellationTokenSource = Nothing) As Tasks.Task(Of FtpStatus)
Try
Dim cfg As New FtpConfig
If ServidorFTP.Pasivo Then
cfg.DataConnectionType = FtpDataConnectionType.PASV
Else
cfg.DataConnectionType = FtpDataConnectionType.AutoActive
End If
cfg.RetryAttempts = ServidorFTP.Reintentos
cfg.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
cfg.EncryptionMode = FtpEncryptionMode.Explicit
cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
cfg.EncryptionMode = FtpEncryptionMode.Implicit
cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
cfg.EncryptionMode = FtpEncryptionMode.None
cfg.SslProtocols = Security.Authentication.SslProtocols.None
End Select
' Using ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg)
Dim ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificadoAsync
Dim t As FtpStatus
ftp.Encoding = System.Text.Encoding.UTF8
If ct Is Nothing Then
Await ftp.Connect()
t = Await ftp.DownloadStream(st, Fichero,, Progreso)
Else
Await ftp.Connect(ct.Token)
t = Await ftp.DownloadStream(st, Fichero, , Progreso, ct.Token)
End If
If t = FtpStatus.Failed Then Throw New Exception("Error descargando fichero " & Fichero)
If ct IsNot Nothing Then
Await ftp.Disconnect(ct.Token)
Else
Await ftp.Disconnect
End If
HoraControl = Now
Return t
' End Using
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Function
Public Shared Async Function DescargaFicheroAsync(FicheroLocal As String, FicheroRemoto As String, ServidorFTP As ServidorFTP, Optional Progreso As IProgress(Of FtpProgress) = Nothing, Optional ByVal Verificacion As FtpVerify = FtpVerify.None, Optional ct As Threading.CancellationTokenSource = Nothing) As Tasks.Task(Of FtpStatus)
Try
Dim cfg As New FtpConfig
If ServidorFTP.Pasivo Then
cfg.DataConnectionType = FtpDataConnectionType.PASV
Else
cfg.DataConnectionType = FtpDataConnectionType.AutoActive
End If
cfg.RetryAttempts = ServidorFTP.Reintentos
cfg.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
cfg.EncryptionMode = FtpEncryptionMode.Explicit
cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
cfg.EncryptionMode = FtpEncryptionMode.Implicit
cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
cfg.EncryptionMode = FtpEncryptionMode.None
cfg.SslProtocols = Security.Authentication.SslProtocols.None
End Select
' Using ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg)
Dim ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificadoAsync
Dim t As FtpStatus
ftp.Encoding = System.Text.Encoding.UTF8
If ct Is Nothing Then
Await ftp.Connect()
t = Await ftp.DownloadFile(FicheroLocal, FicheroRemoto, FtpLocalExists.Overwrite, Verificacion, Progreso)
Else
Await ftp.Connect(ct.Token)
t = Await ftp.DownloadFile(FicheroLocal, FicheroRemoto, FtpLocalExists.Overwrite, Verificacion, Progreso, ct.Token)
End If
If t = FtpStatus.Failed Then Throw New Exception("Error descargando fichero " & FicheroLocal & " de " & FicheroRemoto & " ")
If ct IsNot Nothing Then
Await ftp.Disconnect(ct.Token)
Else
Await ftp.Disconnect
End If
HoraControl = Now
Return t
'End Using
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Function
Public Shared Sub DescargaFichero(FicheroLocal As String, FicheroRemoto As String, ServidorFTP As ServidorFTP, Optional Progreso As Action(Of FtpProgress) = Nothing, Optional ByVal Verificacion As FtpVerify = FtpVerify.None)
Try
Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado
If ServidorFTP.Pasivo Then
ftp.Config.DataConnectionType = FtpDataConnectionType.PASV
Else
ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive
End If
ftp.Config.RetryAttempts = ServidorFTP.Reintentos
ftp.Config.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
ftp.Config.EncryptionMode = FtpEncryptionMode.None
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None
End Select
ftp.Encoding = System.Text.Encoding.UTF8
If ftp.IsConnected = False Then ftp.Connect()
If ftp.DownloadFile(FicheroLocal, FicheroRemoto, FtpLocalExists.Overwrite, Verificacion, Progreso) = FtpStatus.Failed Then Throw New Exception("No se ha podido descargar el fichero " & FicheroRemoto & " en " & FicheroLocal)
ftp.Disconnect()
HoraControl = Now
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Sub
Public Shared Async Function EnviaFicheroAsync(FicheroOrigen As String, FicheroDestino As String, ServidorFTP As ServidorFTP, Optional Progreso As IProgress(Of FtpProgress) = Nothing, Optional Verificacion As FtpVerify = FtpVerify.None, Optional ct As Threading.CancellationTokenSource = Nothing) As Tasks.Task(Of FtpStatus)
Try
Dim cfg As New FtpConfig
If ServidorFTP.Pasivo Then
cfg.DataConnectionType = FtpDataConnectionType.PASV
Else
cfg.DataConnectionType = FtpDataConnectionType.AutoActive
End If
cfg.RetryAttempts = ServidorFTP.Reintentos
cfg.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
cfg.EncryptionMode = FtpEncryptionMode.Explicit
cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
cfg.EncryptionMode = FtpEncryptionMode.Implicit
cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
cfg.EncryptionMode = FtpEncryptionMode.None
cfg.SslProtocols = Security.Authentication.SslProtocols.None
End Select
Dim ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificadoAsync
ftp.Encoding = System.Text.Encoding.UTF8
Dim t As FtpStatus
If ct Is Nothing Then
Await ftp.Connect()
t = Await ftp.UploadFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite, False, Verificacion, Progreso)
Else
Await ftp.Connect(ct.Token)
t = Await ftp.UploadFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite, False, Verificacion, Progreso, ct.Token)
End If
If ct IsNot Nothing Then
Await ftp.Disconnect(ct.Token)
Else
Await ftp.Disconnect
End If
If t = FtpStatus.Failed Then Throw New Exception("Error enviado fichero " & FicheroOrigen & " a " & FicheroDestino)
Return t
HoraControl = Now
' End Using
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Function
Public Shared Async Function RenombraFicheroAsync(FicheroOrigen As String, FicheroDestino As String, ServidorFTP As ServidorFTP) As Tasks.Task(Of FtpStatus)
Try
Dim cfg As New FtpConfig
If ServidorFTP.Pasivo Then
cfg.DataConnectionType = FtpDataConnectionType.PASV
Else
cfg.DataConnectionType = FtpDataConnectionType.AutoActive
End If
cfg.RetryAttempts = ServidorFTP.Reintentos
cfg.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
cfg.EncryptionMode = FtpEncryptionMode.Explicit
cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
cfg.EncryptionMode = FtpEncryptionMode.Implicit
cfg.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
cfg.EncryptionMode = FtpEncryptionMode.None
cfg.SslProtocols = Security.Authentication.SslProtocols.None
End Select
Dim ftp As AsyncFtpClient = New AsyncFtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto, cfg)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificadoAsync
ftp.Encoding = System.Text.Encoding.UTF8
If ftp.IsConnected = False Then Await ftp.Connect()
If Not ftp.Capabilities.Contains(FtpCapability.MDTM) Then ftp.Capabilities.Add(FtpCapability.MDTM)
' MsgBox("renombrando fichero " & FicheroOrigen & " a " & FicheroDestino)
Dim t = Await ftp.MoveFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite)
' MsgBox(t)
Await ftp.Disconnect()
If t = FtpStatus.Failed Then Throw New Exception("Error renombrando fichero " & FicheroOrigen & " a " & FicheroDestino)
Return t
HoraControl = Now
' End Using
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Function
Public Shared Sub EnviaFichero(FicheroOrigen As String, FicheroDestino As String, ServidorFTP As ServidorFTP, Optional Progreso As Action(Of FtpProgress) = Nothing, Optional Verificacion As FtpVerify = FtpVerify.None)
Try
Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado
If ServidorFTP.Pasivo Then
ftp.Config.DataConnectionType = FtpDataConnectionType.PASV
Else
ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive
End If
ftp.Config.RetryAttempts = ServidorFTP.Reintentos
ftp.Config.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
ftp.Config.EncryptionMode = FtpEncryptionMode.None
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None
End Select
ftp.Encoding = System.Text.Encoding.UTF8
If ftp.IsConnected = False Then ftp.Connect()
If Not ftp.Capabilities.Contains(FtpCapability.MDTM) Then ftp.Capabilities.Add(FtpCapability.MDTM)
Dim t = ftp.UploadFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite, False, Verificacion, Progreso)
If t = FtpStatus.Failed Then Throw New Exception("Error enviando fichero " & FicheroOrigen & " a " & FicheroDestino & " ")
ftp.Disconnect()
HoraControl = Now
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Sub
Public Shared Sub EnviaFichero(FicheroOrigen As Byte(), FicheroDestino As String, ServidorFTP As ServidorFTP, Optional Progreso As Action(Of FtpProgress) = Nothing)
Try
Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado
If ServidorFTP.Pasivo Then
ftp.Config.DataConnectionType = FtpDataConnectionType.PASV
Else
ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive
End If
ftp.Config.RetryAttempts = ServidorFTP.Reintentos
ftp.Config.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
ftp.Config.EncryptionMode = FtpEncryptionMode.None
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None
End Select
ftp.Encoding = System.Text.Encoding.UTF8
If ftp.IsConnected = False Then ftp.Connect()
If Not ftp.Capabilities.Contains(FtpCapability.MDTM) Then ftp.Capabilities.Add(FtpCapability.MDTM)
Dim t = ftp.UploadBytes(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite, False, Progreso)
If t = FtpStatus.Failed Then Throw New Exception("Error enviando fichero ")
ftp.Disconnect()
HoraControl = Now
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Sub
Public Shared Sub CreaDirectorio(Directorio As String, ServidorFTP As ServidorFTP)
Try
Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado
If ServidorFTP.Pasivo Then
ftp.Config.DataConnectionType = FtpDataConnectionType.PASV
Else
ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive
End If
ftp.Config.RetryAttempts = ServidorFTP.Reintentos
ftp.Config.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
ftp.Config.EncryptionMode = FtpEncryptionMode.None
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None
End Select
ftp.Encoding = System.Text.Encoding.UTF8
If ftp.IsConnected = False Then ftp.Connect()
If Not ftp.DirectoryExists(Directorio) Then
ftp.CreateDirectory(Directorio, True)
End If
ftp.Disconnect()
HoraControl = Now
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Sub
Public Shared Sub EliminaFichero(Fichero As String, ServidorFTP As ServidorFTP)
Try
Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado
If ServidorFTP.Pasivo Then
ftp.Config.DataConnectionType = FtpDataConnectionType.PASV
Else
ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive
End If
ftp.Config.RetryAttempts = ServidorFTP.Reintentos
ftp.Config.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
ftp.Config.EncryptionMode = FtpEncryptionMode.None
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None
End Select
ftp.Encoding = System.Text.Encoding.UTF8
If ftp.IsConnected = False Then ftp.Connect()
ftp.DeleteFile(Fichero)
ftp.Disconnect()
HoraControl = Now
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Sub
Public Shared Function ExisteFichero(Fichero As String, ServidorFTP As ServidorFTP) As Boolean
Try
Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto)
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado
If ServidorFTP.Pasivo Then
ftp.Config.DataConnectionType = FtpDataConnectionType.PASV
Else
ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive
End If
ftp.Config.RetryAttempts = ServidorFTP.Reintentos
ftp.Config.ConnectTimeout = ServidorFTP.Timeout
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
ftp.Config.EncryptionMode = FtpEncryptionMode.None
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None
End Select
ftp.Encoding = System.Text.Encoding.UTF8
If ftp.IsConnected = False Then ftp.Connect()
If Not ftp.Capabilities.Contains(FtpCapability.MDTM) Then ftp.Capabilities.Add(FtpCapability.MDTM)
Return ftp.FileExists(Fichero)
ftp.Disconnect()
HoraControl = Now
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Function
Public Shared Sub RenombraFichero(FicheroOrigen As String, FicheroDestino As String, ServidorFTP As ServidorFTP)
Try
Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto)
If ServidorFTP.Pasivo Then
ftp.Config.DataConnectionType = FtpDataConnectionType.PASV
Else
ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive
End If
ftp.Config.RetryAttempts = ServidorFTP.Reintentos
ftp.Config.ConnectTimeout = ServidorFTP.Timeout
AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado
Select Case ServidorFTP.Seguridad
Case SeguridadFTP.Explicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Explicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case SeguridadFTP.Implicita
ftp.Config.EncryptionMode = FtpEncryptionMode.Implicit
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.Tls + Security.Authentication.SslProtocols.Tls11 + Security.Authentication.SslProtocols.Tls12
Case Else
ftp.Config.EncryptionMode = FtpEncryptionMode.None
ftp.Config.SslProtocols = Security.Authentication.SslProtocols.None
End Select
ftp.Encoding = System.Text.Encoding.UTF8
If ftp.IsConnected = False Then ftp.Connect()
If Not ftp.Capabilities.Contains(FtpCapability.MDTM) Then ftp.Capabilities.Add(FtpCapability.MDTM)
ftp.MoveFile(FicheroOrigen, FicheroDestino, FtpRemoteExists.Overwrite)
ftp.Disconnect()
HoraControl = Now
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Sub
'Public Shared Sub MueveFicheros(PatronFicheroOrigen As String, DirectorioDestino As String, ServidorFTP As ServidorFTP)
' Try
' Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Puerto, ServidorFTP.Usuario, ServidorFTP.Contraseña)
' If ServidorFTP.Pasivo Then ftp.DataConnectionType = ServidorFTP.Pasivo
' AddHandler ftp.ValidateCertificate, AddressOf ValidarCertificado
' Select Case ServidorFTP.Seguridad
' Case SeguridadFTP.Explicita
' ftp.EncryptionMode = FtpEncryptionMode.Explicit
' ftp.SslProtocols = Security.Authentication.SslProtocols.Tls
' Case SeguridadFTP.Implicita
' ftp.EncryptionMode = FtpEncryptionMode.Implicit
' ftp.SslProtocols = Security.Authentication.SslProtocols.Tls
' Case Else
' ftp.EncryptionMode = FtpEncryptionMode.None
' End Select
' ftp.Encoding = System.Text.Encoding.UTF8
' Dim lf = ftp.GetListing(PatronFicheroOrigen)
' If DirectorioDestino.EndsWith("/") = False Then DirectorioDestino &= "/"
' For Each F In lf
' ftp.Rename(F.FullName, DirectorioDestino & F.Name)
' Next
' Catch EX As tsl5.TsExcepcion
' Throw EX
' Catch EX As Exception
' Throw New tsl5.TsExcepcion(EX.Message, EX, "FTP_ERROR.DESCONOCIDO", )
' End Try
'End Sub
Public Shared Function ObtieneListaFicheros(Ruta As String, ServidorFTP As ServidorFTP) As FtpListItem()
Try
Dim ftp As New FtpClient(ServidorFTP.Servidor, ServidorFTP.Usuario, ServidorFTP.Contraseña, ServidorFTP.Puerto)
If ServidorFTP.Pasivo Then
ftp.Config.DataConnectionType = FtpDataConnectionType.PASV
Else
ftp.Config.DataConnectionType = FtpDataConnectionType.AutoActive
End If
ftp.Config.RetryAttempts = ServidorFTP.Reintentos
ftp.Config.ConnectTimeout = ServidorFTP.Timeout
' ftp.Config.ListingCulture = Globalization.CultureInfo.CurrentCulture
If ftp.IsConnected = False Then ftp.Connect()
Dim lf = ftp.GetListing(Ruta)
ftp.Disconnect()
HoraControl = Now
Return lf
Catch EX As Exception
Throw New tsl5.tsExcepcion(EX.Message, EX, "FTP_ERROR")
End Try
End Function
Private Shared Sub ValidarCertificado(control As FtpClient, e As FtpSslValidationEventArgs)
e.Accept = True
End Sub
Private Shared Sub ValidarCertificadoAsync(control As AsyncFtpClient, e As FtpSslValidationEventArgs)
e.Accept = True
End Sub
End Class
Public Class ServidorFTP
Property Servidor As String
Property Puerto As Integer
Property Seguridad As SeguridadFTP
Property Pasivo As Boolean
Property Timeout As Integer
Property Usuario As String
Property Contraseña As String
Property Reintentos As Integer
Public Sub New(Servidor As String, Puerto As Integer, Usuario As String, Contraseña As String, Optional Seguridad As SeguridadFTP = SeguridadFTP.Ninguna, Optional Pasivo As Boolean = False, Optional timeout As Integer = 20000, Optional Reintentos As Integer = 3)
_Servidor = Servidor
_Puerto = Puerto
_Seguridad = Seguridad
_Pasivo = Pasivo
_Timeout = timeout
_Usuario = Usuario
_Contraseña = Contraseña
_Reintentos = Reintentos
End Sub
End Class
Public Enum SeguridadFTP
Ninguna = 0
Implicita = 1
Explicita = 2
ExplicitaConControl = 3
ExplicitaControlOpcional = 4
SoloControl = 5
SoloDatos = 6
End Enum