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 }
复制代码

 

posted @   fengdong  阅读(1425)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示