在 .NET 中可以使用 System.Net.FtpWebRequest 类来连接 FTP 服务器,实现文件上传和下载。以下是实现文件上传和下载的完整代码示例。
1. 上传文件到 FTP 服务器
using System;
using System.IO;
using System.Net;
class FtpUploader
{
public static void UploadFile(string ftpUrl, string filePath, string ftpUsername, string ftpPassword)
{
try
{
// 获取文件名
string fileName = Path.GetFileName(filePath);
// 拼接目标 FTP 地址
string uploadUrl = $"{ftpUrl}/{fileName}";
// 创建 FTP 请求
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uploadUrl);
request.Method = WebRequestMethods.Ftp.UploadFile;
// 设置登录凭据
request.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
// 读取本地文件
byte[] fileContents = File.ReadAllBytes(filePath);
// 设置上传文件的长度
request.ContentLength = fileContents.Length;
// 上传文件
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(fileContents, 0, fileContents.Length);
}
// 获取响应
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
Console.WriteLine($"上传完成: {response.StatusDescription}");
}
}
catch (Exception ex)
{
Console.WriteLine($"上传失败: {ex.Message}");
}
}
}
2. 从 FTP 服务器下载文件
class FtpDownloader
{
public static void DownloadFile(string ftpUrl, string fileName, string savePath, string ftpUsername, string ftpPassword)
{
try
{
// 拼接目标 FTP 地址
string downloadUrl = $"{ftpUrl}/{fileName}";
// 创建 FTP 请求
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(downloadUrl);
request.Method = WebRequestMethods.Ftp.DownloadFile;
// 设置登录凭据
request.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
// 获取响应
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
using (Stream responseStream = response.GetResponseStream())
using (FileStream fileStream = new FileStream(savePath, FileMode.Create))
{
responseStream.CopyTo(fileStream);
Console.WriteLine($"下载完成: {fileName} 保存到 {savePath}");
}
}
catch (Exception ex)
{
Console.WriteLine($"下载失败: {ex.Message}");
}
}
}
3. 示例调用
class Program
{
static void Main(string[] args)
{
string ftpUrl = "ftp://your-ftp-server.com";
string ftpUsername = "ftp-user";
string ftpPassword = "ftp-password";
// 文件上传
string fileToUpload = @"C:\path\to\your\file.txt";
FtpUploader.UploadFile(ftpUrl, fileToUpload, ftpUsername, ftpPassword);
// 文件下载
string fileNameToDownload = "file.txt";
string savePath = @"C:\path\to\save\file.txt";
FtpDownloader.DownloadFile(ftpUrl, fileNameToDownload, savePath, ftpUsername, ftpPassword);
}
}
4. 注意事项
FTP 地址格式:需要以 ftp:// 开头。如果使用非默认端口(21),请指定端口号,如:ftp://your-ftp-server.com:2121。
权限:确保 FTP 用户有读写权限。
被动模式:根据服务器设置,可能需要启用被动模式:
request.UsePassive = true; // 或 false
安全性:如果需要加密传输,建议使用 FTPS 或 SFTP。FtpWebRequest 不支持 SFTP,可以使用第三方库(如 SSH.NET)来实现。