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】