194 lines
7.7 KiB
VB.net
194 lines
7.7 KiB
VB.net
Imports System.Threading
|
||
Imports FluentFTP
|
||
|
||
Namespace UTSModule
|
||
Public Class UtsFtp
|
||
''' <summary>测试器句柄,全局唯一</summary>
|
||
Private Shared _object As UtsFtp
|
||
|
||
''' <summary>初始化测试器线程锁</summary>
|
||
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"
|
||
|
||
''' <summary>
|
||
''' 初始化FTP连接参数
|
||
''' </summary>
|
||
''' <param name="port">端口号</param>
|
||
''' <param name="user">用户名</param>
|
||
''' <param name="pwd">用户密码</param>
|
||
Public Shared Sub InitConnectParams(port As Integer, user As String, pwd As String)
|
||
FtpPort = port
|
||
FtpUser = user
|
||
FtpPwd = pwd
|
||
End Sub
|
||
|
||
''' <summary>
|
||
''' 创建类单例对象
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
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
|
||
|
||
|
||
''' <summary>
|
||
''' Ftp服务器地址
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
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
|
||
|
||
''' <summary>
|
||
''' 判断FTP文件是否存在
|
||
''' </summary>
|
||
''' <param name="path"></param>
|
||
''' <returns></returns>
|
||
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
|
||
|
||
''' <summary>
|
||
''' 创建Ftp文件夹
|
||
''' </summary>
|
||
''' <param name="remoteDir">Ftp文件夹路径</param>
|
||
''' <param name="force">创建所有不存在的文件夹路径</param>
|
||
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
|
||
|
||
|
||
''' <summary>
|
||
''' 上传本地文件至Ftp
|
||
''' 将本地指定路径压缩包上传到FTP服务器上manager文件夹下
|
||
''' </summary>
|
||
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
|
||
|
||
|
||
''' <summary>
|
||
''' 从Ftp下载文件至本地
|
||
''' 从FTP下载压缩包,到本地指定路径
|
||
''' </summary>
|
||
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
|
||
|