608 lines
34 KiB
VB.net
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
|
|
|