.net core FTPHelper类

在 .NET Core 中,FTP(File Transfer Protocol)是一个较常用的功能,可以用于与 FTP 服务器交互,如上传文件、下载文件、删除文件等操作。以下是一个通用的 FTPHelper 工具类代码。

实现 FTPHelper

C#

using System;
using System.IO;
using System.Net;

public static class FTPHelper
{
    /// <summary>
    /// 上传文件到 FTP 服务器。
    /// </summary>
    /// <param name="ftpUri">FTP 地址(例如:ftp://example.com/remote/path/file.txt)</param>
    /// <param name="localFilePath">本地文件路径</param>
    /// <param name="username">FTP 用户名</param>
    /// <param name="password">FTP 密码</param>
    public static void UploadFile(string ftpUri, string localFilePath, string username, string password)
    {
        if (!File.Exists(localFilePath))
            throw new FileNotFoundException("本地文件不存在", localFilePath);

        try
        {
            // 获取文件内容
            byte[] fileContents;
            using (FileStream fs = new FileStream(localFilePath, FileMode.Open, FileAccess.Read))
            {
                fileContents = new byte[fs.Length];
                fs.Read(fileContents, 0, fileContents.Length);
            }

            // 创建 FTP 请求
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUri);
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.Credentials = new NetworkCredential(username, password);
            request.UseBinary = true; // 二进制上传
            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}");
            throw;
        }
    }

    /// <summary>
    /// 从 FTP 服务器下载文件。
    /// </summary>
    /// <param name="ftpUri">FTP 文件地址(例如:ftp://example.com/remote/path/file.txt)</param>
    /// <param name="localFilePath">本地保存路径</param>
    /// <param name="username">FTP 用户名</param>
    /// <param name="password">FTP 密码</param>
    public static void DownloadFile(string ftpUri, string localFilePath, string username, string password)
    {
        try
        {
            // 创建 FTP 请求
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUri);
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            request.Credentials = new NetworkCredential(username, password);
            request.UseBinary = true; // 二进制下载

            // 获取响应
            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            using (Stream responseStream = response.GetResponseStream())
            using (FileStream fs = new FileStream(localFilePath, FileMode.Create, FileAccess.Write))
            {
                responseStream.CopyTo(fs);
                Console.WriteLine($"下载完成,状态:{response.StatusDescription}");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"下载文件失败: {ex.Message}");
            throw;
        }
    }

    /// <summary>
    /// 删除 FTP 服务器上的文件。
    /// </summary>
    /// <param name="ftpUri">FTP 文件地址(例如:ftp://example.com/remote/path/file.txt)</param>
    /// <param name="username">FTP 用户名</param>
    /// <param name="password">FTP 密码</param>
    public static void DeleteFile(string ftpUri, string username, string password)
    {
        try
        {
            // 创建 FTP 请求
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUri);
            request.Method = WebRequestMethods.Ftp.DeleteFile;
            request.Credentials = new NetworkCredential(username, password);

            // 获取响应
            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            {
                Console.WriteLine($"删除完成,状态:{response.StatusDescription}");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"删除文件失败: {ex.Message}");
            throw;
        }
    }

    /// <summary>
    /// 列出 FTP 目录中的文件和文件夹。
    /// </summary>
    /// <param name="ftpUri">FTP 目录地址(例如:ftp://example.com/remote/path/)</param>
    /// <param name="username">FTP 用户名</param>
    /// <param name="password">FTP 密码</param>
    /// <returns>文件和文件夹的列表</returns>
    public static string[] ListDirectory(string ftpUri, string username, string password)
    {
        try
        {
            // 创建 FTP 请求
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUri);
            request.Method = WebRequestMethods.Ftp.ListDirectory;
            request.Credentials = new NetworkCredential(username, password);

            // 获取响应
            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            using (Stream responseStream = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(responseStream))
            {
                var result = reader.ReadToEnd();
                return result.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"列出目录失败: {ex.Message}");
            throw;
        }
    }
}

功能说明

  1. UploadFile:

    • 上传文件到远程 FTP 服务器。
    • 支持二进制文件,确保文件不会因文本编码问题损坏。
  2. DownloadFile:

    • 下载文件到本地路径。
    • 使用 Stream 操作文件以提高效率。
  3. DeleteFile:

    • 删除 FTP 服务器上的文件。
  4. ListDirectory:

    • 列出目录中的所有文件和子目录。

使用示例

请确保提供正确的 FTP 服务器地址、登录凭证以及文件路径。

C#

class Program
{
    static void Main(string[] args)
    {
        string ftpUri = "ftp://example.com/uploads/test.txt";
        string userName = "your_username";
        string password = "your_password";
        string localPath = "C:\\Temp\\test.txt";

        // 上传文件
        FTPHelper.UploadFile(ftpUri, localPath, userName, password);

        // 下载文件
        FTPHelper.DownloadFile(ftpUri, "C:\\Temp\\downloaded_test.txt", userName, password);

        // 删除文件
        FTPHelper.DeleteFile(ftpUri, userName, password);

        // 列出目录内容
        var files = FTPHelper.ListDirectory("ftp://example.com/uploads/", userName, password);
        foreach (var file in files)
        {
            Console.WriteLine(file);
        }
    }
}

注意事项

  1. FTP 安全性

    • FTP 使用明文传输数据和凭证,建议在生产环境中使用安全的 SFTP(SSH File Transfer Protocol)或 FTPS(FTP over SSL/TLS)协议。
  2. 连接超时

    • 默认超时时间是 100 秒,可通过 request.Timeout 或 request.ReadWriteTimeout 设置。
  3. 防止路径问题

    • 请确保 FTP 地址、用户名和密码正确,路径中避免使用多余的斜杠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值