Files

193 lines
5.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Cowain.Bake.Common.Core;
using FluentFTP;
using System;
using System.IO;
namespace Cowain.Bake.Communication.FTP
{
//现在是的是短连接,即上传完就关闭; 后期如果有效率上的要求,要改成长连接,就是过程中不关闭连接
//建立好连接700毫秒
//关闭连接90毫秒
//全部都是远程操作
public class FtpHelper
{
#region
public FtpClient ftpClient { get; set; } ///
public string IpAddr { get; set; } /// IP地址
public string RelatePath { get; set; } /// 相对路径
public int Port { get; set; } /// 端口号
public string UserName { get; set; } /// 用户名
public string Password { get; set; } /// 密码
public bool IsConnected { get; set; } = false;
//https://blog.csdn.net/fengershishe/article/details/129140618
public FtpHelper(string ipAddr, int port, string userName, string password, string relatePath = "")
{
this.IpAddr = ipAddr;
this.Port = port;
this.UserName = userName;
this.Password = password;
//this.RelatePath = relatePath;
}
#endregion
public bool Connect()
{
try
{
Close();
//using (var ftpClient = new FtpClient(this.IpAddr, this.UserName, this.Password, this.Port))
ftpClient = new FtpClient(this.IpAddr, this.Port);
ftpClient.Connect(); // 连接到FTP服务器
}
catch (Exception ex)
{
LogHelper.Instance.Error($"Ftp Connect {ex.Message}");
IsConnected = false;
return false;
}
IsConnected = ftpClient.IsConnected;
return IsConnected;
}
bool IsConnect()
{
if (null == ftpClient || !ftpClient.IsConnected || !IsConnected)
{
Connect();
}
return IsConnected;
}
public void Close()
{
if (null != ftpClient)
{
ftpClient.Disconnect();
ftpClient.Dispose();
ftpClient = null;
}
}
~FtpHelper()
{
Close();
}
#region
public FtpListItem[] ListDir()
{
FtpListItem[] lists = null;
if (IsConnect())
{
ftpClient.SetWorkingDirectory(this.RelatePath);
lists = ftpClient.GetListing(); //当前路径下,返回所有文件
}
return lists;
}
// 上传文件
public bool UpLoad(string srcFilePath, string descPath)
{
string descFilePath = null;
try
{
if (IsConnect())
{
string fileName = Path.GetFileName(srcFilePath);
char lastChar = descPath[descPath.Length - 1];
if ('\\' == lastChar
|| '/' == lastChar)
{
descFilePath = descPath + fileName; //descPath, 最后一个,是"/"
}
else
{
descFilePath = descPath + "/" + fileName; //descPath, 最后一个,是"/"
}
FtpStatus result = ftpClient.UploadFile(srcFilePath, descFilePath); // ("local/file.txt", "remote/file.txt");
return FtpStatus.Success == result ? true : false;
}
}
catch (Exception ex)
{
IsConnected = false;
LogHelper.Instance.Error($"Ftp UpLoad {ex.Message}");
}
return false;
}
///创建目录(远程创建)
private bool CheckDirIsExists(string dir)
{
bool flag = false;
try
{
if (IsConnect())
{
ftpClient.SetWorkingDirectory(this.RelatePath);
flag = ftpClient.DirectoryExists(dir);
if (!flag)
{
flag = ftpClient.CreateDirectory(dir); //client.CreateDirectory("remote/directory");
return flag;
}
}
return flag;
}
catch (Exception ex)
{
IsConnected = false;
LogHelper.Instance.Error($"Ftp CheckDirIsExists {ex.Message}");
}
return false;
}
public bool DeleteFile(string dir)
{
try
{
if (IsConnect())
{
ftpClient.SetWorkingDirectory(this.RelatePath);
ftpClient.DeleteFile(dir);
return true;
}
}
catch (Exception ex)
{
IsConnected = false;
LogHelper.Instance.Error($"Ftp DeleteFile {ex.Message}");
}
return false;
}
public bool DownloadFile(string localAddress, string remoteAddress)
{
try
{
if (IsConnect())
{
ftpClient.SetWorkingDirectory(this.RelatePath);
FtpStatus status = ftpClient.DownloadFile(localAddress, remoteAddress);
return status == FtpStatus.Success ? true : false;
}
}
catch (Exception ex)
{
IsConnected = false;
LogHelper.Instance.Error($"Ftp DownloadFile {ex.Message}");
}
return false;
}
#endregion
}
}