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;

}
}


}

posted @   问渠哪得清如许-修  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示