C# FTP上传文件
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Net; 5 using Microsoft.AspNetCore.Http; 6 7 namespace Util 8 { 9 public class FTPHelper 10 { 11 #region FTP服务器身份验证信息 12 13 private static string ftpServer = GlobalSwitch.ServerAddress; 14 private static string username = GlobalSwitch.LoginName; 15 private static string password = GlobalSwitch.LoginPWD; 16 17 #endregion 18 19 #region 上传文件 20 21 /// <summary> 22 /// 上传文件 23 /// </summary> 24 /// <param name="file"></param> 25 /// <param name="dir"></param> 26 public static void FileUpLoad(IFormFile file, string dir) 27 { 28 try 29 { 30 string url = Path.Combine(ftpServer, dir); 31 string fileName = file.FileName; 32 Uri uri = new Uri(Path.Combine(url, fileName)); 33 using (Stream fs = file.OpenReadStream()) 34 { 35 long length = fs.Length; 36 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri); 37 reqFTP.Credentials = new NetworkCredential(username, password); 38 reqFTP.KeepAlive = false; 39 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; 40 reqFTP.UseBinary = true; 41 42 using (Stream stream = reqFTP.GetRequestStream()) 43 { 44 int BufferLength = (Int32)length; 45 byte[] b = new byte[BufferLength]; 46 int i; 47 while ((i = fs.Read(b, 0, BufferLength)) > 0) 48 { 49 stream.Write(b, 0, i); 50 } 51 Console.WriteLine("上传文件成功"); 52 } 53 } 54 } 55 catch (Exception ex) 56 { 57 throw ex; 58 } 59 } 60 61 /// <summary> 62 /// 文件上传 63 /// </summary> 64 /// <param name="filePath">原路径(绝对路径)包括文件名</param> 65 /// <param name="uploadPath">目标文件夹</param> 66 public static void FileUpLoad(string filePath, string uploadPath) 67 { 68 try 69 { 70 string url = Path.Combine(ftpServer,uploadPath); 71 try 72 { 73 try 74 { 75 FileInfo fileInfo = new FileInfo(filePath); 76 using (FileStream fs = fileInfo.OpenRead()) 77 { 78 long length = fs.Length; 79 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + fileInfo.Name)); 80 reqFTP.Credentials = new NetworkCredential(username, password); 81 reqFTP.KeepAlive = false; 82 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; 83 reqFTP.UseBinary = true; 84 using (Stream stream = reqFTP.GetRequestStream()) 85 { 86 int BufferLength = (Int32)length; 87 byte[] b = new byte[BufferLength]; 88 int i; 89 while ((i = fs.Read(b, 0, BufferLength)) > 0) 90 { 91 stream.Write(b, 0, i); 92 } 93 Console.WriteLine("上传文件成功"); 94 } 95 } 96 } 97 catch (Exception ex) 98 { 99 Console.WriteLine("上传文件失败错误为" + ex.Message); 100 } 101 finally 102 { 103 104 } 105 } 106 catch (Exception ex) 107 { 108 Console.WriteLine("上传文件失败错误为" + ex.Message); 109 } 110 finally 111 { 112 113 } 114 } 115 catch (Exception ex) 116 { 117 Console.WriteLine("上传文件失败错误为" + ex.Message); 118 } 119 } 120 121 #endregion 122 123 #region 下载文件 124 125 /// <summary> 126 /// 下载文件 127 /// </summary> 128 /// <param name="dir"></param> 129 /// <param name="fileName"></param> 130 /// <param name="localFile"></param> 131 public static void GetFile(string dir, string fileName, string localFile) 132 { 133 string filedownloadPath = Path.Combine(ftpServer, dir); 134 Uri uri = new Uri(Path.Combine(filedownloadPath, fileName)); 135 try 136 { 137 FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri); 138 request.Credentials = new NetworkCredential(username, password); 139 request.UseBinary = true; 140 request.UsePassive = true; 141 request.KeepAlive = false; 142 request.Method = WebRequestMethods.Ftp.DownloadFile; 143 144 FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 145 using (Stream stream = response.GetResponseStream()) 146 { 147 int bufferSize = 65536; 148 using (FileStream localFileStream = new FileStream(localFile, FileMode.OpenOrCreate)) 149 { 150 byte[] byteBuffer = new byte[bufferSize]; 151 int bytesRead = stream.Read(byteBuffer, 0, bufferSize); 152 153 try 154 { 155 while (bytesRead > 0) 156 { 157 localFileStream.Write(byteBuffer, 0, bytesRead); 158 bytesRead = stream.Read(byteBuffer, 0, bufferSize); 159 } 160 } 161 catch (Exception ex) 162 { 163 throw ex; 164 } 165 } 166 } 167 response.Close(); 168 request = null; 169 } 170 catch (Exception ex) 171 { 172 throw ex; 173 } 174 } 175 176 /// <summary> 177 /// 获取文件 byte[] 178 /// </summary> 179 /// <param name="dir"></param> 180 /// <param name="fileName"></param> 181 /// <returns></returns> 182 public static byte[] GetFileBytes(string dir, string fileName) 183 { 184 int bufferSize = 65536; 185 byte[] byteBuffer = new byte[bufferSize]; 186 string filedownloadPath = Path.Combine(ftpServer, dir); 187 Uri uri = new Uri(Path.Combine(filedownloadPath, fileName)); 188 try 189 { 190 FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri); 191 request.Credentials = new NetworkCredential(username, password); 192 request.UseBinary = true; 193 request.UsePassive = true; 194 request.KeepAlive = false; 195 request.Method = WebRequestMethods.Ftp.DownloadFile; 196 197 FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 198 using (Stream stream = response.GetResponseStream()) 199 { 200 stream.Read(byteBuffer, 0, bufferSize); 201 } 202 } 203 catch (Exception ex) 204 { 205 throw ex; 206 } 207 return byteBuffer; 208 } 209 210 #endregion 211 212 #region 删除文件 213 214 /// <summary> 215 /// 删除文件 216 /// </summary> 217 /// <param name="fileName">服务器下的相对路径 包括文件名</param> 218 public static void DeleteFileName(string fileName) 219 { 220 try 221 { 222 string ftpIP = ftpServer.Substring(6); 223 FileInfo fileInf = new FileInfo(Path.Combine(ftpIP, fileName)); 224 string uri = Path.Combine(ftpServer, fileName); 225 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 226 reqFTP.UseBinary = true; 227 reqFTP.Credentials = new NetworkCredential(username, password); 228 reqFTP.KeepAlive = false; 229 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile; 230 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 231 response.Close(); 232 } 233 catch (Exception ex) 234 { 235 Console.WriteLine("删除文件出错:" + ex.Message); 236 } 237 } 238 239 #endregion 240 241 #region 获取文件列表 242 243 /// <summary> 244 /// 从ftp服务器上获得文件列表 245 /// </summary> 246 /// <param name="RequedstPath">服务器下的相对路径</param> 247 /// <returns></returns> 248 public static List<string> GetFile(string RequedstPath) 249 { 250 List<string> strs = new List<string>(); 251 try 252 { 253 string uri = Path.Combine(ftpServer, RequedstPath); 254 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 255 reqFTP.Credentials = new NetworkCredential(username, password); 256 reqFTP.KeepAlive = false; 257 reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 258 WebResponse response = reqFTP.GetResponse(); 259 StreamReader reader = new StreamReader(response.GetResponseStream()); 260 261 string line = reader.ReadLine(); 262 while (line != null) 263 { 264 if (!line.Contains("<DIR>")) 265 { 266 string msg = line.Substring(39).Trim(); 267 strs.Add(msg); 268 } 269 line = reader.ReadLine(); 270 } 271 reader.Close(); 272 response.Close(); 273 return strs; 274 } 275 catch (Exception ex) 276 { 277 Console.WriteLine("获取文件出错:" + ex.Message); 278 } 279 return strs; 280 } 281 282 #endregion 283 284 #region 创建文件夹 285 286 /// <summary> 287 /// 新建目录 上一级必须先存在 288 /// </summary> 289 /// <param name="dirName">服务器下的相对路径</param> 290 public static void MakeDir(string dirName) 291 { 292 try 293 { 294 string uri = Path.Combine(ftpServer,dirName); 295 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 296 reqFTP.UseBinary = true; 297 reqFTP.KeepAlive = false; 298 reqFTP.Credentials = new NetworkCredential(username, password); 299 reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; 300 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 301 response.Close(); 302 } 303 catch (Exception ex) 304 { 305 Console.WriteLine("创建目录出错:" + ex.Message); 306 } 307 } 308 309 #endregion 310 311 #region 删除文件夹 312 313 /// <summary> 314 /// 删除目录 上一级必须先存在 315 /// </summary> 316 /// <param name="dirName">服务器下的相对路径</param> 317 public static void DelDir(string dirName) 318 { 319 try 320 { 321 string uri =Path.Combine(ftpServer,dirName); 322 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 323 reqFTP.Credentials = new NetworkCredential(username, password); 324 reqFTP.KeepAlive = false; 325 reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory; 326 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 327 response.Close(); 328 } 329 catch (Exception ex) 330 { 331 Console.WriteLine("删除目录出错:" + ex.Message); 332 } 333 } 334 335 #endregion 336 337 #region 获取文件夹列表 338 339 /// <summary> 340 /// 从ftp服务器上获得文件夹列表 341 /// </summary> 342 /// <param name="RequedstPath">服务器下的相对路径</param> 343 /// <returns></returns> 344 public static List<string> GetDirctory(string RequedstPath) 345 { 346 List<string> strs = new List<string>(); 347 try 348 { 349 string uri =Path.Combine(ftpServer,RequedstPath); 350 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 351 reqFTP.Credentials = new NetworkCredential(username, password); 352 reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 353 reqFTP.KeepAlive = false; 354 WebResponse response = reqFTP.GetResponse(); 355 StreamReader reader = new StreamReader(response.GetResponseStream()); 356 357 string line = reader.ReadLine(); 358 while (line != null) 359 { 360 if (line.Contains("<DIR>")) 361 { 362 string msg = line.Substring(line.LastIndexOf("<DIR>") + 5).Trim(); 363 strs.Add(msg); 364 } 365 line = reader.ReadLine(); 366 } 367 reader.Close(); 368 response.Close(); 369 return strs; 370 } 371 catch (Exception ex) 372 { 373 Console.WriteLine("获取目录出错:" + ex.Message); 374 } 375 return strs; 376 } 377 378 #endregion 379 } 380 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效