雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

.NET C#连接FTP实现文件上传下载

2025-01-07 14

在 .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)来实现。

5. 常见错误处理

530 Not logged in: 检查用户名、密码是否正确。 550 File not found: 检查文件路径或权限。 超时: 确保 FTP 服务器地址和网络连接正常。 更新于:2天前
赞一波!

文章评论

评论问答