Imports System.Threading Imports FluentFTP Namespace UTSModule Public Class UtsFtp ''' 测试器句柄,全局唯一 Private Shared _object As UtsFtp ''' 初始化测试器线程锁 Private Shared ReadOnly InitLock As New Object() Private Shared FtpPort As Integer Private Shared FtpUser As String Private Shared FtpPwd As String Private _ftpUser As String Private _ftpPwd As String Private _ftpPort As Integer Private _ftpHost As String Private Default_FTP_Host As String = "blv-oa.com" ''' ''' 初始化FTP连接参数 ''' ''' 端口号 ''' 用户名 ''' 用户密码 Public Shared Sub InitConnectParams(port As Integer, user As String, pwd As String) FtpPort = port FtpUser = user FtpPwd = pwd End Sub ''' ''' 创建类单例对象 ''' ''' Public Shared Function CreateObject() As UtsFtp If _object Is Nothing Then SyncLock InitLock Thread.MemoryBarrier() If _object Is Nothing Then _object = New UtsFtp("boonlivenas.synology.me", FtpPort, FtpUser, FtpPwd) End If End SyncLock End If Return _object End Function Private Sub New(host As String, port As Integer, user As String, pwd As String) _ftpHost = host _ftpPort = port _ftpUser = user _ftpPwd = pwd End Sub ''' ''' Ftp服务器地址 ''' ''' Public Property FtpHost As String Get Return _ftpHost End Get Set(value As String) _ftpHost = value End Set End Property Private Sub OnValidateCertificate(control As FtpClient, e As FtpSslValidationEventArgs) e.Accept = True End Sub ''' ''' 判断FTP文件是否存在 ''' ''' ''' Public Function FtpFileExists(path As String) As Boolean Dim result As Boolean Using ftpClient As FtpClient = New FtpClient(_ftpHost, _ftpPort, _ftpUser, _ftpPwd) AddHandler ftpClient.ValidateCertificate, AddressOf OnValidateCertificate ftpClient.EncryptionMode = FtpEncryptionMode.Auto ftpClient.AutoConnect() result = ftpClient.FileExists(path) ftpClient.Disconnect() End Using Return result End Function ''' ''' 创建Ftp文件夹 ''' ''' Ftp文件夹路径 ''' 创建所有不存在的文件夹路径 Public Sub CreateDir(remoteDir As String, Optional force As Boolean = False) Using ftpClient As FtpClient = New FtpClient(FtpHost, _ftpPort, _ftpUser, _ftpPwd) AddHandler ftpClient.ValidateCertificate, AddressOf OnValidateCertificate ftpClient.EncryptionMode = FtpEncryptionMode.Auto ftpClient.AutoConnect() ftpClient.CreateDirectory(remoteDir, force) ftpClient.Disconnect() End Using End Sub ''' ''' 上传本地文件至Ftp ''' 将本地指定路径压缩包上传到FTP服务器上manager文件夹下 ''' Public Sub FtpUpload(remotePath As String, loadPath As String) Using ftpClient As FtpClient = New FtpClient(_ftpHost, _ftpPort, _ftpUser, _ftpPwd) AddHandler ftpClient.ValidateCertificate, AddressOf OnValidateCertificate ftpClient.EncryptionMode = FtpEncryptionMode.Auto ftpClient.AutoConnect() ftpClient.UploadFile(loadPath, remotePath, FtpRemoteExists.Overwrite, True) ftpClient.Disconnect() End Using End Sub Public Sub FtpUpload_UdpLogOnly(ByVal FtpDownloadfile As Dictionary(Of String, String), ByVal BAK_Path As String, ByRef FtpUploadReturnMsg As String) Using ftpClient As FtpClient = New FtpClient(_ftpHost, _ftpPort, _ftpUser, _ftpPwd) AddHandler ftpClient.ValidateCertificate, AddressOf OnValidateCertificate 'ftpClient.EncryptionMode = FtpEncryptionMode.Auto ftpClient.EncryptionMode = FtpEncryptionMode.None 'ftpClient.ActivePorts = 8000 ftpClient.AutoConnect() For Each loadfile In FtpDownloadfile Dim PureFileName As String = GetPathFromFileName(loadfile.Value) Dim FtpBakTargetFilePath As String = BAK_Path & PureFileName Dim flag As FtpStatus = ftpClient.UploadFile(loadfile.Value, loadfile.Key, FtpRemoteExists.Overwrite, True) If flag = 1 Then '上传成功 IO.File.Delete(loadfile.Value) FtpUploadReturnMsg = "FTP上传成功。" Else '上传失败 IO.File.Copy(loadfile.Value, FtpBakTargetFilePath, True) IO.File.Delete(loadfile.Value) FtpUploadReturnMsg = "FTP上传失败,文件已经移动到临时文件夹。" End If Next ftpClient.Disconnect() End Using End Sub ''' ''' 从Ftp下载文件至本地 ''' 从FTP下载压缩包,到本地指定路径 ''' Public Overloads Sub FtpDownload(remotePath As String, loadPath As String, Optional existMode As FtpLocalExists = FtpLocalExists.Overwrite) Using ftpClient As FtpClient = New FtpClient(_ftpHost, _ftpPort, _ftpUser, _ftpPwd) AddHandler ftpClient.ValidateCertificate, AddressOf OnValidateCertificate ftpClient.EncryptionMode = FtpEncryptionMode.Auto ftpClient.AutoConnect() ftpClient.DownloadFile(loadPath, remotePath, existMode) ftpClient.Disconnect() End Using End Sub Public Overloads Sub FtpDownload(FtpDownloadfile As Dictionary(Of String, String), Optional existMode As FtpLocalExists = FtpLocalExists.Overwrite) Using ftpClient As FtpClient = New FtpClient(_ftpHost, _ftpPort, _ftpUser, _ftpPwd) AddHandler ftpClient.ValidateCertificate, AddressOf OnValidateCertificate ftpClient.EncryptionMode = FtpEncryptionMode.Auto ftpClient.AutoConnect() For Each loadfile In FtpDownloadfile ftpClient.DownloadFile(loadfile.Value, loadfile.Key, existMode) Next ftpClient.Disconnect() End Using End Sub '函数: GetPathFromFileName '作用: 从完整路径获取 文件名 '输入: 完整路径, 目录分隔符 '返回: 文件名(带扩展名) Public Function GetPathFromFileName(ByVal strFullPath As String, Optional ByVal strSplitor As String = "\") As String Return Left$(strFullPath, InStrRev(strFullPath, strSplitor, , vbTextCompare)) End Function End Class End Namespace