1.首先打开VS并创建窗体应用程序
做一个简单的测试程序demo,主要测试FTP的上传功能。
2.《获取远程文件夹内容》这个按钮是为了获取上传的文件,代码实现如下:
3.《打开上传文件夹并上传》这个按钮是为了把本地文件上传到FTP服务器,代码实现如下:
public class FtpClient
{
private string ftpServer;
private NetworkCredential credentials;
public FtpClient(string ftpServer, string username, string password)
{
this.ftpServer = ftpServer;
this.credentials = new NetworkCredential(username, password);
}
/// <summary>
/// 下载文件
/// </summary>
/// <param name="remotePath"></param>
/// <param name="localPath"></param>
/// <returns></returns>
public bool DownloadFile(string remotePath, string localPath)
{
try
{
string uri = $"ftp://{ftpServer}/{remotePath}";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = credentials;
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
using (Stream responseStream = response.GetResponseStream())
using (FileStream fileStream = new FileStream(localPath, FileMode.Create))
{
responseStream.CopyTo(fileStream);
}
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 上传文件到FTP服务器
/// </summary>
/// <param name="path"></param>
/// <param name="name"></param>
/// <returns></returns>
public bool UploadFile(string path, string name)
{
FileInfo f = new FileInfo(path);
path = $"ftp://{ftpServer}/{name}"; //这个路径是我要传到ftp目录下的这个目录下
FtpWebRequest reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
reqFtp.Method = WebRequestMethods.Ftp.UploadFile;
reqFtp.UsePassive = false;//只需要添加这一句话 reqFtp.UseBinary= true;
reqFtp.Credentials = credentials;
reqFtp.KeepAlive = false;
reqFtp.Method = WebRequestMethods.Ftp.UploadFile;
reqFtp.ContentLength = f.Length;
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
FileStream fs = f.OpenRead();
try
{
Stream strm = reqFtp.GetRequestStream();
contentLen = fs.Read(buff, 0, buffLength);
while (contentLen != 0)
{
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
strm.Close();
fs.Close();
return true;
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 判断FTP服务器文件名是否存在
/// </summary>
/// <param name="ftpUrl"></param>
/// <returns></returns>
public bool FileExists(string ftpUrl)
{
try
{
// 创建FtpWebRequest对象
ftpUrl = $"ftp://{ftpServer}/{ftpUrl}";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl);
request.Method = WebRequestMethods.Ftp.GetFileSize; // 设置FTP方法
request.Credentials = credentials; // 设置登录凭证
// 发送请求并获取响应
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
// 获取文件大小,如果文件存在,这里会返回大小
long size = response.ContentLength;
// 关闭连接和释放资源
response.Close();
// 文件存在
return true;
}
catch (WebException ex)
{
// 文件不存在或其他错误
return false;
}
}
}
4.感谢浏览,之所以上传博客,为了整理自己以前做过的测试笔记,以后会一一整理并上传。
5.附上测试demo。