FTP帮助类
public class FTPHelper
{
string ftpServerIPout;
string ftpServerIPin;
string ftpUserIDout;
string ftpUserIDin;
string ftpPasswordout;
string ftpPasswordin;
FtpWebRequest reqFTPout;
FtpWebRequest reqFTPin;
public FTPHelper(string ftpServerIPout, string ftpUserIDout, string ftpPasswordout, string ftpServerIPin, string ftpUserIDin, string ftpPasswordin)
{
this.ftpServerIPout = ftpServerIPout;
this.ftpServerIPin = ftpServerIPin;
this.ftpUserIDout = ftpUserIDout;
this.ftpUserIDin = ftpUserIDin;
this.ftpPasswordout = ftpPasswordout;
this.ftpPasswordin = ftpPasswordin;
}
/// <summary>
/// 连接两个FTP
/// </summary>
/// <param name="pathout"></param>
/// <param name="pathin"></param>
private void Connect(string pathout, string pathin)//连接ftp
{
// 根据uri创建FtpWebRequest对象
reqFTPout = (FtpWebRequest)FtpWebRequest.Create(new Uri(pathout));
// 指定数据传输类型
reqFTPout.UseBinary = true;
// ftp用户名和密码
reqFTPout.Credentials = new NetworkCredential(ftpUserIDout, ftpPasswordout);
reqFTPout.Method = WebRequestMethods.Ftp.DownloadFile;
// 根据uri创建FtpWebRequest对象
reqFTPin = (FtpWebRequest)FtpWebRequest.Create(new Uri(pathin));
// 指定数据传输类型
reqFTPin.UseBinary = true;
// ftp用户名和密码
reqFTPin.Credentials = new NetworkCredential(ftpUserIDin, ftpPasswordin);
reqFTPin.Method = WebRequestMethods.Ftp.UploadFile;
}
/// <summary>
/// 一个FTP上传到另一个FTP
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public bool FTPUploadToFTP(string fileName)//上面的代码实现了从ftp服务器下载文件的功能
{
try
{
string uri = "ftp://" + ftpServerIPin;
if (!DirectoryExist(uri))
{
FtpWebRequest frequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
frequest.Credentials = new NetworkCredential(ftpUserIDin, ftpPasswordin);
frequest.Method = WebRequestMethods.Ftp.MakeDirectory;
frequest.GetResponse();
}
string urlout = "ftp://" + ftpServerIPout + "/" + fileName;
string urlin = "ftp://" + ftpServerIPin + "/" + fileName;
Connect(urlout, urlin);//连接
FtpWebResponse response = (FtpWebResponse)reqFTPout.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
Stream strm = reqFTPin.GetRequestStream();
while (readCount != 0)
{
strm.Write(buffer, 0, bufferSize);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
strm.Close();
response.Close();
return true;
}
catch(Exception e)
{
return false;
}
}
/// <summary>
/// FTP下载
/// </summary>
/// <param name="filePath"></param>
/// <param name="fileName"></param>
/// <param name="ftpServerIP"></param>
/// <param name="username"></param>
/// <param name="password"></param>
public void DownloadFtp(string filePath, string fileName, string ftpServerIP, string username, string password)
{
try
{
if (!Directory.Exists(filePath))
Directory.CreateDirectory(filePath);
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + ftpServerIP + "/" + fileName);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(username, password);
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (FileStream fs = new FileStream(filePath + "\\" + fileName, FileMode.Create))
{
byte[] buffer = new byte[102400];
int read = 0;
do
{
read = responseStream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, read);
fs.Flush();
} while (!(read == 0));
fs.Flush();
fs.Close();
}
}
}
}
catch (Exception ex)
{
throw new Exception($"FTP下载: {ex}");
}
}
/// <summary>
/// FTP上传
/// </summary>
/// <param name="filePath"></param>
/// <param name="fileName"></param>
/// <param name="ftpServerIP"></param>
/// <param name="username"></param>
/// <param name="password"></param>
public void UploadFtp(string filePath, string fileName, string ftpServerIP, string username, string password)
{
try
{
string uri = "ftp://" + ftpServerIP;
if (!DirectoryExist(uri))
{
FtpWebRequest frequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
frequest.Credentials = new NetworkCredential(username, password);
frequest.Method = WebRequestMethods.Ftp.MakeDirectory;
frequest.GetResponse();
}
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create("ftp://" + ftpServerIP + "/" + fileName);
ftp.Credentials = new NetworkCredential(username, password);
//userid and password for the ftp server to given
ftp.KeepAlive = true;
ftp.UseBinary = true;
ftp.Method = WebRequestMethods.Ftp.UploadFile;
FileStream fs = File.OpenRead(filePath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
Stream ftpstream = ftp.GetRequestStream();
ftpstream.Write(buffer, 0, buffer.Length);
ftpstream.Close();
}
catch(Exception ex)
{
throw new Exception($"FTP上传: {ex}");
}
}
private bool DirectoryExist(string URI)
{
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(URI));
reqFTP.Credentials = new NetworkCredential("", "");
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
reqFTP.UseBinary = true;
try
{
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
response.Close();
return true;
}
catch (Exception ex)
{
string e = ex.Message;
return false;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义