• FTP上传文件夹


    
    
    文件上传类
    
    
     1 using System;
      2 using System.Collections.Generic;
      3 using System.Diagnostics;
      4 using System.IO;
      5 using System.Linq;
      6 using System.Net;
      7 using System.Text;
      8 using System.Threading.Tasks;
      9 
     10 namespace ImageResize
     11 {
     12     public class FtpClient
     13     {
     14         public string ftpUser = string.Empty;
     15         public string ftpPassword = string.Empty;
     16         public string ftpRootURL = string.Empty;
     17         public bool isFlag = true;
     18         public string baseFolderPath = null;
     19 
     20         public FtpClient(string url, string userid, string password)
     21         {
     22             this.ftpUser = userid; 
     23             this.ftpPassword = password;
     24             this.ftpRootURL = url;
     25         }
     26 
     27         /// <summary>
     28         /// 文件夹上传
     29         /// </summary>
     30         /// <param name="sourceFolder"></param>
     31         /// <param name="destFolder">ftpRootUrl + ftpPath</param>
     32         /// <returns></returns>
     33         public bool foldersUpload(string sourceFolder, string destFolder, string detailFolder)
     34         {
     35             bool isFolderFlag = false;
     36             if (isFlag)
     37             {
     38                 baseFolderPath = sourceFolder.Substring(0, sourceFolder.LastIndexOf("\\"));
     39                 isFlag = false;
     40             }
     41 
     42             string selectFolderName = sourceFolder.Replace(baseFolderPath, "").Replace("\\", "/");
     43            
     44             if (selectFolderName != null)
     45             {
     46                 string ftpDirectory = destFolder + selectFolderName;
     47                 if (ftpDirectory.LastIndexOf('/') < ftpDirectory.Length - 1)
     48                 {
     49                     ftpDirectory = ftpDirectory + "/";
     50                 }
     51                 if (!FtpDirectoryIsNotExists(ftpDirectory))
     52                 {
     53                     CreateFtpDirectory(ftpDirectory);
     54                 }
     55             }
     56 
     57             try
     58             {
     59                 string[] directories = Directory.EnumerateDirectories(sourceFolder).ToArray();
     60                 if (directories.Length > 0)
     61                 {
     62                     foreach (string d in directories)
     63                     {
     64                         foldersUpload(d, destFolder, sourceFolder.Replace(baseFolderPath, "").Replace("\\","/"));
     65                     }
     66                 }
     67 
     68                 string[] files = Directory.EnumerateFiles(sourceFolder).ToArray();
     69                 if (files.Length > 0)
     70                 {
     71                     foreach (string s in files)
     72                     {
     73                         
     74                         string fileName = s.Substring(s.LastIndexOf("\\")).Replace("\\", "/");
     75 
     76                         if(selectFolderName.Contains("/"))
     77                         {
     78                            if(selectFolderName.LastIndexOf('/') < selectFolderName.Length -1)
     79                            {
     80                                selectFolderName = selectFolderName + '/';
     81                            }
     82                     
     83                         }
     84                         ftpRootURL = destFolder;
     85 
     86                         fileUpload(new FileInfo(s), selectFolderName , fileName.Substring(1,fileName.Length -1));
     87 
     88                     }
     89                 }
     90                 isFolderFlag = true;
     91 
     92             }
     93             catch (Exception ex)
     94             {
     95                 Debug.WriteLine(ex.Message);
     96             }
     97             return isFolderFlag;
     98         }
     99 
    100 
    101         /// <summary>
    102         /// 上传
    103         /// </summary>
    104         /// <param name="localFile">本地文件绝对路径</param>
    105         /// <param name="ftpPath">上传到ftp的路径</param>
    106         /// <param name="ftpFileName">上传到ftp的文件名</param>
    107         public bool fileUpload(FileInfo localFile, string ftpPath, string ftpFileName)
    108         {
    109             bool success = false;
    110             FtpWebRequest ftpWebRequest = null;
    111 
    112             FileStream localFileStream = null;
    113             Stream requestStream = null;
    114 
    115             try
    116             {
    117                 // 检查FTP目标存放目录是否存在
    118                 // 1.1 ftp 上目标目录
    119                 string destFolderPath =  ftpRootURL + ftpPath;
    120 
    121                 if (!FtpDirectoryIsNotExists(destFolderPath))
    122                 {
    123                     CreateFtpDirectory(destFolderPath);
    124                 }
    125 
    126                 string uri = ftpRootURL + ftpPath + ftpFileName;
    127                 ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    128                 ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);
    129                 ftpWebRequest.UseBinary = true;
    130 
    131                 ftpWebRequest.KeepAlive = false;
    132                 ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
    133                 ftpWebRequest.ContentLength = localFile.Length;
    134 
    135                 int buffLength = 2048;
    136                 byte[] buff = new byte[buffLength];
    137                 int contentLen;
    138 
    139                 localFileStream = localFile.OpenRead();
    140                 requestStream = ftpWebRequest.GetRequestStream();
    141 
    142                 contentLen = localFileStream.Read(buff, 0, buffLength);
    143                 while (contentLen != 0)
    144                 {
    145                     // 把内容从file stream 写入upload stream
    146                     requestStream.Write(buff, 0, contentLen);
    147                     contentLen = localFileStream.Read(buff, 0, buffLength);
    148                 }
    149 
    150                 success = true;
    151             }
    152             catch (Exception)
    153             {
    154                 success = false;
    155             }
    156             finally
    157             {
    158                 if (requestStream != null)
    159                 {
    160                     requestStream.Close();
    161                 }
    162                 if (localFileStream != null)
    163                 {
    164                     localFileStream.Close();
    165                 }
    166             }
    167 
    168             return success;
    169         }
    170 
    171 
    172         /// <summary>
    173         /// 上传文件
    174         /// </summary>
    175         /// <param name="localPath">本地文件地址(没有文件名)</param>
    176         /// <param name="localFileName">本地文件名</param>
    177         /// <param name="ftpPath">上传到ftp的路径</param>
    178         /// <param name="ftpFileName">上传到ftp的文件名</param>
    179         public bool fileUpload(string localPath, string localFileName, string ftpPath, string ftpFileName)
    180         {
    181             bool success = false;
    182             try
    183             {
    184                 FileInfo localFile = new FileInfo(localPath + localFileName);
    185                 if (localFile.Exists)
    186                 {
    187                     success = fileUpload(localFile, ftpPath, ftpFileName);
    188                 }
    189                 else
    190                 {
    191                     success = false;
    192                 }
    193             }
    194             catch (Exception)
    195             {
    196                 success = false;
    197             }
    198             return success;
    199         }
    200 
    201 
    202         /// <summary>
    203         /// 下载文件
    204         /// </summary>
    205         /// <param name="localPath">本地文件地址(没有文件名)</param>
    206         /// <param name="localFileName">本地文件名</param>
    207         /// <param name="ftpPath">下载的ftp的路径</param>
    208         /// <param name="ftpFileName">下载的ftp的文件名</param>
    209         public bool fileDownload(string localPath, string localFileName, string ftpPath, string ftpFileName)
    210         {
    211             bool success = false;
    212             FtpWebRequest ftpWebRequest = null;
    213             FtpWebResponse ftpWebResponse = null;
    214             Stream ftpResponseStream = null;
    215             FileStream outputStream = null;
    216             try
    217             {
    218                 outputStream = new FileStream(localPath + localFileName, FileMode.Create);
    219                 string uri = ftpRootURL + ftpPath + ftpFileName;
    220                 ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    221                 ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);
    222                 ftpWebRequest.UseBinary = true;
    223                 ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile;
    224                 ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
    225                 ftpResponseStream = ftpWebResponse.GetResponseStream();
    226                 long contentLength = ftpWebResponse.ContentLength;
    227                 int bufferSize = 2048;
    228                 byte[] buffer = new byte[bufferSize];
    229                 int readCount;
    230                 readCount = ftpResponseStream.Read(buffer, 0, bufferSize);
    231                 while (readCount > 0)
    232                 {
    233                     outputStream.Write(buffer, 0, readCount);
    234                     readCount = ftpResponseStream.Read(buffer, 0, bufferSize);
    235                 }
    236                 success = true;
    237             }
    238             catch (Exception)
    239             {
    240                 success = false;
    241             }
    242             finally
    243             {
    244                 if (outputStream != null)
    245                 {
    246                     outputStream.Close();
    247                 }
    248                 if (ftpResponseStream != null)
    249                 {
    250                     ftpResponseStream.Close();
    251                 }
    252                 if (ftpWebResponse != null)
    253                 {
    254                     ftpWebResponse.Close();
    255                 }
    256             }
    257             return success;
    258         }
    259 
    260 
    261         /// <summary>
    262         /// 重命名
    263         /// </summary>
    264         /// <param name="ftpPath">ftp文件路径</param>
    265         /// <param name="currentFilename"></param>
    266         /// <param name="newFilename"></param>
    267         public bool fileRename(string ftpPath, string currentFileName, string newFileName)
    268         {
    269             bool success = false;
    270             FtpWebRequest ftpWebRequest = null;
    271             FtpWebResponse ftpWebResponse = null;
    272             Stream ftpResponseStream = null;
    273             try
    274             {
    275                 string uri = ftpRootURL + ftpPath + currentFileName;
    276                 ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    277                 ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);
    278                 ftpWebRequest.UseBinary = true;
    279                 ftpWebRequest.Method = WebRequestMethods.Ftp.Rename;
    280                 ftpWebRequest.RenameTo = newFileName;
    281 
    282                 ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
    283                 ftpResponseStream = ftpWebResponse.GetResponseStream();
    284 
    285             }
    286             catch (Exception)
    287             {
    288                 success = false;
    289             }
    290             finally
    291             {
    292                 if (ftpResponseStream != null)
    293                 {
    294                     ftpResponseStream.Close();
    295                 }
    296                 if (ftpWebResponse != null)
    297                 {
    298                     ftpWebResponse.Close();
    299                 }
    300             }
    301             return success;
    302         }
    303 
    304 
    305         /// <summary>
    306         /// 消除文件
    307         /// </summary>
    308         /// <param name="filePath"></param>
    309         public bool fileDelete(string ftpPath, string ftpName)
    310         {
    311             bool success = false;
    312             FtpWebRequest ftpWebRequest = null;
    313             FtpWebResponse ftpWebResponse = null;
    314             Stream ftpResponseStream = null;
    315             StreamReader streamReader = null;
    316             try
    317             {
    318                 string uri = ftpRootURL + ftpPath + ftpName;
    319                 ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    320                 ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);
    321                 ftpWebRequest.KeepAlive = false;
    322                 ftpWebRequest.Method = WebRequestMethods.Ftp.DeleteFile;
    323                 ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
    324                 long size = ftpWebResponse.ContentLength;
    325                 ftpResponseStream = ftpWebResponse.GetResponseStream();
    326                 streamReader = new StreamReader(ftpResponseStream);
    327                 string result = String.Empty;
    328                 result = streamReader.ReadToEnd();
    329 
    330                 success = true;
    331             }
    332             catch (Exception)
    333             {
    334                 success = false;
    335             }
    336             finally
    337             {
    338                 if (streamReader != null)
    339                 {
    340                     streamReader.Close();
    341                 }
    342                 if (ftpResponseStream != null)
    343                 {
    344                     ftpResponseStream.Close();
    345                 }
    346                 if (ftpWebResponse != null)
    347                 {
    348                     ftpWebResponse.Close();
    349                 }
    350             }
    351             return success;
    352         }
    353 
    354         /// <summary>
    355         /// 文件存在检查
    356         /// </summary>
    357         public bool fileCheckExist(string destFolderPath, string fileName)
    358         {
    359             bool success = false;
    360             FtpWebRequest ftpWebRequest = null;
    361             WebResponse webResponse = null;
    362             StreamReader reader = null;
    363             try
    364             {
    365 
    366 
    367                 ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(destFolderPath));
    368                 ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);
    369                 ftpWebRequest.Method = WebRequestMethods.Ftp.ListDirectory;
    370                 ftpWebRequest.KeepAlive = false;
    371                 webResponse = ftpWebRequest.GetResponse();
    372                 reader = new StreamReader(webResponse.GetResponseStream());
    373                 string line = reader.ReadLine();
    374                 while (line != null)
    375                 {
    376                     string ftpName = "test.jpg";
    377                     if (line == ftpName)
    378                     {
    379                         success = true;
    380                         break;
    381                     }
    382                     line = reader.ReadLine();
    383                 }
    384             }
    385             catch (Exception)
    386             {
    387                 success = false;
    388             }
    389             finally
    390             {
    391                 if (reader != null)
    392                 {
    393                     reader.Close();
    394                 }
    395                 if (webResponse != null)
    396                 {
    397                     webResponse.Close();
    398                 }
    399             }
    400             return success;
    401         }
    402 
    403        
    404         /// <summary>
    405         /// 创建FTP文件目录
    406         /// </summary>
    407         /// <param name="ftpDirectory">ftp服务器上的文件目录</param>
    408         public void CreateFtpDirectory(string ftpDirectory)
    409         {
    410             try
    411             {
    412                 FtpWebRequest ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpDirectory));
    413                 ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);
    414                 ftpWebRequest.UseBinary = true;
    415                 ftpWebRequest.KeepAlive = false;
    416                 ftpWebRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
    417 
    418                 FtpWebResponse respFTP = (FtpWebResponse)ftpWebRequest.GetResponse();
    419                 respFTP.Close();
    420             }
    421             catch (Exception ex)
    422             {
    423                 Debug.WriteLine("FTP创建目录失败" + ex.Message);
    424             }
    425 
    426         }
    427 
    428 
    429 
    430 
    431         /// <summary>
    432         /// 获取目录下的详细信息
    433         /// </summary>
    434         /// <param name="localDir">本机目录</param>
    435         /// <returns></returns>
    436         public List<List<string>> GetDirDetails(string localDir)
    437         {
    438             List<List<string>> infos = new List<List<string>>();
    439             try
    440             {
    441                 infos.Add(Directory.GetFiles(localDir).ToList());
    442                 infos.Add(Directory.GetDirectories(localDir).ToList());
    443                 for (int i = 0; i < infos[0].Count; i++)
    444                 {
    445                     int index = infos[1][i].LastIndexOf(@"\");
    446                     infos[1][i] = infos[1][i].Substring(index + 1);
    447                 }
    448             }
    449             catch(Exception ex)
    450             {
    451                 Debug.WriteLine(ex.Message);
    452             }
    453             return infos;
    454         }
    455 
    456 
    457         public void UploadDirectory(string localDir, string ftpPath, string dirName, string ftpUser, string ftpPassword)
    458         {
    459             if (ftpUser == null)
    460             {
    461                 ftpUser = "";
    462             }
    463             if (ftpPassword == null)
    464             {
    465                 ftpPassword = "";
    466             }
    467 
    468             string dir = localDir + dirName + @"\";
    469 
    470             if (!Directory.Exists(dir))
    471             {
    472                 return;
    473             }
    474 
    475             //if (!CheckDirectoryExist(ftpPath, dirName))
    476             //{
    477             //    MakeDir(ftpPath, dirName);
    478              
    479             //}
    480 
    481             List<List<string>> infos = GetDirDetails(dir); //获取当前目录下的所有文件和文件夹
    482             //先上传文件
    483         //    MyLog.ShowMessage(dir + "下的文件数:" + infos[0].Count.ToString());
    484             for (int i = 0; i < infos[0].Count; i++)
    485             {
    486                 Console.WriteLine(infos[0][i]);
    487              //   UpLoadFile(dir + infos[0][i], ftpPath + dirName + @"/" + infos[0][i], ftpUser, ftpPassword);
    488             }
    489             //再处理文件夹
    490           //  MyLog.ShowMessage(dir + "下的目录数:" + infos[1].Count.ToString());
    491             for (int i = 0; i < infos[1].Count; i++)
    492             {
    493                 UploadDirectory(dir, ftpPath + dirName + @"/", infos[1][i], ftpUser, ftpPassword);
    494             }
    495         }
    496 
    497         /// <summary>
    498         /// 判断Ftp上待上传文件存放的(文件夹)目录是否存在
    499         /// 注意事项:目录结构的最后一个字符一定要是一个斜杠
    500         /// </summary>
    501         /// <param name="destFtpFolderPath">Ftp服务器上存放待上传文件的目录</param>
    502         private  bool FtpDirectoryIsNotExists(string destFolderPath)
    503         {
    504             try
    505             {
    506                 var request = (FtpWebRequest)WebRequest.Create(destFolderPath);
    507                 request.Credentials = new NetworkCredential(ftpUser, ftpPassword);
    508                 request.Method = WebRequestMethods.Ftp.ListDirectory;
    509                 FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    510             }
    511             catch (WebException ex)
    512             {
    513                 FtpWebResponse response = (FtpWebResponse)ex.Response;
    514                 if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
    515                 {
    516                     response.Close();
    517                     return false;
    518                 }
    519                 else
    520                 {
    521                     response.Close();
    522                 }
    523             }
    524             return true;
    525         }
    526 
    527         /// <summary>
    528         /// 解析文件所在的路径(即当前文件所在的文件位置)
    529         /// </summary>
    530         /// <param name="destFilePath">需要存储在FTP服务器上的文件路径,如:ftp://192.168.1.100/LocalUser/picture1.jpg</param>
    531         /// <returns></returns>
    532         public string FtpParseDirectory(string destFilePath)
    533         {
    534             return destFilePath.Substring(0, destFilePath.LastIndexOf("/"));
    535         }
    536 
    537 
    538         // 验证文件类型
    539         public bool IsAllowableFileType(string fileName)
    540         {
    541             //从web.config读取判断文件类型限制
    542             string stringstrFileTypeLimit = string.Format(".jpeg|*.jpeg|*.*|All Files");
    543             //当前文件扩展名是否包含在这个字符串中
    544             if (stringstrFileTypeLimit.IndexOf(fileName.ToLower()) != -1)
    545             {
    546                 return true;
    547             }
    548             else
    549             {
    550                 return false;
    551             }
    552         }
    553 
    554         //文件大小
    555         public bool IsAllowableFileSize(long FileContentLength)
    556         {
    557             //从web.config读取判断文件大小的限制
    558             Int32 doubleiFileSizeLimit = 1232;
    559 
    560             //判断文件是否超出了限制
    561             if (doubleiFileSizeLimit > FileContentLength)
    562             {
    563                 return true;
    564             }
    565             else
    566             {
    567                 return false;
    568             }
    569         }
    570 
    571 
    572 
    573     }
    574 }
  • 相关阅读:
    LeetCode Merge Two Sorted Lists 归并排序
    LeetCode Add Binary 两个二进制数相加
    LeetCode Climbing Stairs 爬楼梯
    034 Search for a Range 搜索范围
    033 Search in Rotated Sorted Array 搜索旋转排序数组
    032 Longest Valid Parentheses 最长有效括号
    031 Next Permutation 下一个排列
    030 Substring with Concatenation of All Words 与所有单词相关联的字串
    029 Divide Two Integers 两数相除
    028 Implement strStr() 实现 strStr()
  • 原文地址:https://www.cnblogs.com/tianjinquan/p/3189028.html
Copyright © 2020-2023  润新知