【C#】Ftp上传下载文件

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

public static class FTPMy
{
    /// <summary>
    /// FTP上传文件
    /// </summary>
    /// <param name="bytes">文件字节数组</param>
    /// <param name="adress">ftp地址,示例:“ftp://localhost”</param>
    /// <param name="upFilePath">文件上传到的路径,示例:“folderName/aaa.txt”</param>
    /// <param name="userName">用户名</param>
    /// <param name="password">密码</param>
    /// <returns>是否成功上传</returns>
    public static bool UpFile(byte[] bytes, string adress, string upFilePath, string userName = null, string password = null)
    {
        try
        {
            //创建FTP Web请求
            FtpWebRequest ftpWebRequest = (FtpWebRequest)WebRequest.Create(adress + "/" + upFilePath);
            //身份认证
            if (userName != null && password != null)
                ftpWebRequest.Credentials = new NetworkCredential(userName, password);
            //设定为“上传方法”
            ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
            //设定超时为10秒
            ftpWebRequest.Timeout = 10000;
            //建立tcp连接上传
            using (var requestStream = ftpWebRequest.GetRequestStream())
            {
                requestStream.Write(bytes, 0, bytes.Length);
            }
            //获取响应(这里会重新建立一个tcp连接)
            //using (var ftpResponse = (FtpWebResponse)ftpWebRequest.GetResponse())
            //{
            //    //Console.WriteLine(ftpResponse.StatusDescription);
            //    //Debug.Log(ftpResponse.StatusDescription);
            //}
        }
        catch (Exception e)
        {
            //Console.WriteLine(e.Message);
            //Debug.LogError(e.Message);
            return false;
        }
        return true;
    }

    /// <summary>
    /// FTP下载文件
    /// </summary>
    /// <param name="ftpUrl">下载地址,示例:“ftp://localhost/aaa.txt”</param>
    /// <param name="username">用户名</param>
    /// <param name="password">密码</param>
    /// <returns>文件字节数组</returns>
    public static byte[] DownFile(string ftpUrl, string username = null, string password = null)
    {
        try
        {
            // 创建 FtpWebRequest 对象  
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl);
            request.Method = WebRequestMethods.Ftp.DownloadFile;

            // 设置凭证  
            if (username != null && password != null)
                request.Credentials = new NetworkCredential(username, password);

            // 获取响应  
            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            using (Stream responseStream = response.GetResponseStream())
            using (MemoryStream memoryStream = new MemoryStream())
            {
                // 将响应流复制到内存流  
                responseStream.CopyTo(memoryStream);
                return memoryStream.ToArray(); // 返回字节数组  
            }
        }
        catch (Exception e)
        {
            //Console.WriteLine(e.Message);
            //Debug.LogError(e.Message);
            return null;
        }
    }
}

FtpWebRequest属性笔记:

  • ftpWebRequest.UseBinary = true;

二进制模式发送数据(填true)、适用于文本内容的ASCII 模式传输数据(填false)【默认true】


  • ftpWebRequest.UsePassive = true;

是否以 ”被动模式“ 进行 FTP 连接,被动模式能适配防火墙和 NAT(网络地址转换)环境,避免被拦截【默认true】
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值