狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#FTP操作類:上傳下載、斷點續傳等

admin
2024年1月12日 21:6 本文熱度 648
  1. using System;  

  2. using System.Collections.Generic;  

  3. using System.Linq;  

  4. using System.Text;  

  5. using System.Net;  

  6. using System.IO;  

  7.   

  8. namespace JianKunKing.Common.Ftp  

  9. {  

  10.     /// <summary>  

  11.     /// ftp方式文件下載上傳  

  12.     /// </summary>  

  13.     public static class FileUpDownload  

  14.     {  

  15.         #region 變量屬性  

  16.         /// <summary>  

  17.         /// Ftp服務器ip  

  18.         /// </summary>  

  19.         public static string FtpServerIP = string.Empty;  

  20.         /// <summary>  

  21.         /// Ftp 指定用戶名  

  22.         /// </summary>  

  23.         public static string FtpUserID = string.Empty;  

  24.         /// <summary>  

  25.         /// Ftp 指定用戶密碼  

  26.         /// </summary>  

  27.         public static string FtpPassword = string.Empty;  

  28.  

  29.         #endregion  

  30.  

  31.         #region 從FTP服務器下載文件,指定本地路徑和本地文件名  

  32.         /// <summary>  

  33.         /// 從FTP服務器下載文件,指定本地路徑和本地文件名  

  34.         /// </summary>  

  35.         /// <param name="remoteFileName">遠程文件名</param>  

  36.         /// <param name="localFileName">保存本地的文件名(包含路徑)</param>  

  37.         /// <param name="ifCredential">是否啟用身份驗證(false:表示允許用戶匿名下載)</param>  

  38.         /// <param name="updateProgress">報告進度的處理(第一個參數:總大小,第二個參數:當前進度)</param>  

  39.         /// <returns>是否下載成功</returns>  

  40.         public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, Action<int, int> updateProgress = null)  

  41.         {  

  42.             FtpWebRequest reqFTP, ftpsize;  

  43.             Stream ftpStream = null;  

  44.             FtpWebResponse response = null;  

  45.             FileStream outputStream = null;  

  46.             try  

  47.             {  

  48.   

  49.                 outputStream = new FileStream(localFileName, FileMode.Create);  

  50.                 if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)  

  51.                 {  

  52.                     throw new Exception("ftp下載目標服務器地址未設置!");  

  53.                 }  

  54.                 Uri uri = new Uri("ftp://" + FtpServerIP + "/" + remoteFileName);  

  55.                 ftpsize = (FtpWebRequest)FtpWebRequest.Create(uri);  

  56.                 ftpsize.UseBinary = true;  

  57.   

  58.                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);  

  59.                 reqFTP.UseBinary = true;  

  60.                 reqFTP.KeepAlive = false;  

  61.                 if (ifCredential)//使用用戶身份認證  

  62.                 {  

  63.                     ftpsize.Credentials = new NetworkCredential(FtpUserID, FtpPassword);  

  64.                     reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);  

  65.                 }  

  66.                 ftpsize.Method = WebRequestMethods.Ftp.GetFileSize;  

  67.                 FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse();  

  68.                 long totalBytes = re.ContentLength;  

  69.                 re.Close();  

  70.   

  71.                 reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;  

  72.                 response = (FtpWebResponse)reqFTP.GetResponse();  

  73.                 ftpStream = response.GetResponseStream();  

  74.   

  75.                 //更新進度    

  76.                 if (updateProgress != null)  

  77.                 {  

  78.                     updateProgress((int)totalBytes, 0);//更新進度條     

  79.                 }  

  80.                 long totalDownloadedByte = 0;  

  81.                 int bufferSize = 2048;  

  82.                 int readCount;  

  83.                 byte[] buffer = new byte[bufferSize];  

  84.                 readCount = ftpStream.Read(buffer, 0, bufferSize);  

  85.                 while (readCount > 0)  

  86.                 {  

  87.                     totalDownloadedByte = readCount + totalDownloadedByte;  

  88.                     outputStream.Write(buffer, 0, readCount);  

  89.                     //更新進度    

  90.                     if (updateProgress != null)  

  91.                     {  

  92.                         updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新進度條     

  93.                     }  

  94.                     readCount = ftpStream.Read(buffer, 0, bufferSize);  

  95.                 }  

  96.                 ftpStream.Close();  

  97.                 outputStream.Close();  

  98.                 response.Close();  

  99.                 return true;  

  100.             }  

  101.             catch (Exception)  

  102.             {  

  103.                 return false;  

  104.                 throw;  

  105.             }  

  106.             finally  

  107.             {  

  108.                 if (ftpStream != null)  

  109.                 {  

  110.                     ftpStream.Close();  

  111.                 }  

  112.                 if (outputStream != null)  

  113.                 {  

  114.                     outputStream.Close();  

  115.                 }  

  116.                 if (response != null)  

  117.                 {  

  118.                     response.Close();  

  119.                 }  

  120.             }  

  121.         }  

  122.         /// <summary>  

  123.         /// 從FTP服務器下載文件,指定本地路徑和本地文件名(支持斷點下載)  

  124.         /// </summary>  

  125.         /// <param name="remoteFileName">遠程文件名</param>  

  126.         /// <param name="localFileName">保存本地的文件名(包含路徑)</param>  

  127.         /// <param name="ifCredential">是否啟用身份驗證(false:表示允許用戶匿名下載)</param>  

  128.         /// <param name="size">已下載文件流大小</param>  

  129.         /// <param name="updateProgress">報告進度的處理(第一個參數:總大小,第二個參數:當前進度)</param>  

  130.         /// <returns>是否下載成功</returns>  

  131.         public static bool FtpBrokenDownload(string remoteFileName, string localFileName, bool ifCredential, long size, Action<int, int> updateProgress = null)  

  132.         {  

  133.             FtpWebRequest reqFTP, ftpsize;  

  134.             Stream ftpStream = null;  

  135.             FtpWebResponse response = null;  

  136.             FileStream outputStream = null;  

  137.             try  

  138.             {  

  139.   

  140.                 outputStream = new FileStream(localFileName, FileMode.Append);  

  141.                 if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)  

  142.                 {  

  143.                     throw new Exception("ftp下載目標服務器地址未設置!");  

  144.                 }  

  145.                 Uri uri = new Uri("ftp://" + FtpServerIP + "/" + remoteFileName);  

  146.                 ftpsize = (FtpWebRequest)FtpWebRequest.Create(uri);  

  147.                 ftpsize.UseBinary = true;  

  148.                 ftpsize.ContentOffset = size;  

  149.   

  150.                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);  

  151.                 reqFTP.UseBinary = true;  

  152.                 reqFTP.KeepAlive = false;  

  153.                 reqFTP.ContentOffset = size;  

  154.                 if (ifCredential)//使用用戶身份認證  

  155.                 {  

  156.                     ftpsize.Credentials = new NetworkCredential(FtpUserID, FtpPassword);  

  157.                     reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);  

  158.                 }  

  159.                 ftpsize.Method = WebRequestMethods.Ftp.GetFileSize;  

  160.                 FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse();  

  161.                 long totalBytes = re.ContentLength;  

  162.                 re.Close();  

  163.   

  164.                 reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;  

  165.                 response = (FtpWebResponse)reqFTP.GetResponse();  

  166.                 ftpStream = response.GetResponseStream();  

  167.   

  168.                 //更新進度    

  169.                 if (updateProgress != null)  

  170.                 {  

  171.                     updateProgress((int)totalBytes, 0);//更新進度條     

  172.                 }  

  173.                 long totalDownloadedByte = 0;  

  174.                 int bufferSize = 2048;  

  175.                 int readCount;  

  176.                 byte[] buffer = new byte[bufferSize];  

  177.                 readCount = ftpStream.Read(buffer, 0, bufferSize);  

  178.                 while (readCount > 0)  

  179.                 {  

  180.                     totalDownloadedByte = readCount + totalDownloadedByte;  

  181.                     outputStream.Write(buffer, 0, readCount);  

  182.                     //更新進度    

  183.                     if (updateProgress != null)  

  184.                     {  

  185.                         updateProgress((int)totalBytes, (int)totalDownloadedByte);//更新進度條     

  186.                     }  

  187.                     readCount = ftpStream.Read(buffer, 0, bufferSize);  

  188.                 }  

  189.                 ftpStream.Close();  

  190.                 outputStream.Close();  

  191.                 response.Close();  

  192.                 return true;  

  193.             }  

  194.             catch (Exception)  

  195.             {  

  196.                 return false;  

  197.                 throw;  

  198.             }  

  199.             finally  

  200.             {  

  201.                 if (ftpStream != null)  

  202.                 {  

  203.                     ftpStream.Close();  

  204.                 }  

  205.                 if (outputStream != null)  

  206.                 {  

  207.                     outputStream.Close();  

  208.                 }  

  209.                 if (response != null)  

  210.                 {  

  211.                     response.Close();  

  212.                 }  

  213.             }  

  214.         }  

  215.   

  216.         /// <summary>  

  217.         /// 從FTP服務器下載文件,指定本地路徑和本地文件名  

  218.         /// </summary>  

  219.         /// <param name="remoteFileName">遠程文件名</param>  

  220.         /// <param name="localFileName">保存本地的文件名(包含路徑)</param>  

  221.         /// <param name="ifCredential">是否啟用身份驗證(false:表示允許用戶匿名下載)</param>  

  222.         /// <param name="updateProgress">報告進度的處理(第一個參數:總大小,第二個參數:當前進度)</param>  

  223.         /// <param name="brokenOpen">是否斷點下載:true 會在localFileName 找是否存在已經下載的文件,并計算文件流大小</param>  

  224.         /// <returns>是否下載成功</returns>  

  225.         public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, bool brokenOpen, Action<int, int> updateProgress = null)  

  226.         {  

  227.             if (brokenOpen)  

  228.             {  

  229.                 try  

  230.                 {  

  231.                     long size = 0;  

  232.                     if (File.Exists(localFileName))  

  233.                     {  

  234.                         using (FileStream outputStream = new FileStream(localFileName, FileMode.Open))  

  235.                         {  

  236.                             size = outputStream.Length;  

  237.                         }  

  238.                     }  

  239.                     return FtpBrokenDownload(remoteFileName, localFileName, ifCredential, size, updateProgress);  

  240.                 }  

  241.                 catch  

  242.                 {  

  243.                     throw;  

  244.                 }  

  245.             }  

  246.             else  

  247.             {  

  248.                 return FtpDownload(remoteFileName, localFileName, ifCredential, updateProgress);  

  249.             }  

  250.         }  

  251.         #endregion  

  252.  

  253.         #region 上傳文件到FTP服務器  

  254.         /// <summary>  

  255.         /// 上傳文件到FTP服務器  

  256.         /// </summary>  

  257.         /// <param name="localFullPath">本地帶有完整路徑的文件名</param>  

  258.         /// <param name="updateProgress">報告進度的處理(第一個參數:總大小,第二個參數:當前進度)</param>  

  259.         /// <returns>是否下載成功</returns>  

  260.         public static bool FtpUploadFile(string localFullPathName, Action<int, int> updateProgress = null)  

  261.         {  

  262.             FtpWebRequest reqFTP;  

  263.             Stream stream = null;  

  264.             FtpWebResponse response = null;  

  265.             FileStream fs = null;  

  266.             try  

  267.             {  

  268.                 FileInfo finfo = new FileInfo(localFullPathName);  

  269.                 if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)  

  270.                 {  

  271.                     throw new Exception("ftp上傳目標服務器地址未設置!");  

  272.                 }  

  273.                 Uri uri = new Uri("ftp://" + FtpServerIP + "/" + finfo.Name);  

  274.                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);  

  275.                 reqFTP.KeepAlive = false;  

  276.                 reqFTP.UseBinary = true;  

  277.                 reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);//用戶,密碼  

  278.                 reqFTP.Method = WebRequestMethods.Ftp.UploadFile;//向服務器發出下載請求命令  

  279.                 reqFTP.ContentLength = finfo.Length;//為request指定上傳文件的大小  

  280.                 response = reqFTP.GetResponse() as FtpWebResponse;  

  281.                 reqFTP.ContentLength = finfo.Length;  

  282.                 int buffLength = 1024;  

  283.                 byte[] buff = new byte[buffLength];  

  284.                 int contentLen;  

  285.                 fs = finfo.OpenRead();  

  286.                 stream = reqFTP.GetRequestStream();  

  287.                 contentLen = fs.Read(buff, 0, buffLength);  

  288.                 int allbye = (int)finfo.Length;  

  289.                 //更新進度    

  290.                 if (updateProgress != null)  

  291.                 {  

  292.                     updateProgress((int)allbye, 0);//更新進度條     

  293.                 }  

  294.                 int startbye = 0;  

  295.                 while (contentLen != 0)  

  296.                 {  

  297.                     startbye = contentLen + startbye;  

  298.                     stream.Write(buff, 0, contentLen);  

  299.                     //更新進度    

  300.                     if (updateProgress != null)  

  301.                     {  

  302.                         updateProgress((int)allbye, (int)startbye);//更新進度條     

  303.                     }  

  304.                     contentLen = fs.Read(buff, 0, buffLength);  

  305.                 }  

  306.                 stream.Close();  

  307.                 fs.Close();  

  308.                 response.Close();  

  309.                 return true;  

  310.   

  311.             }  

  312.             catch (Exception)  

  313.             {  

  314.                 return false;  

  315.                 throw;  

  316.             }  

  317.             finally  

  318.             {  

  319.                 if (fs != null)  

  320.                 {  

  321.                     fs.Close();  

  322.                 }  

  323.                 if (stream != null)  

  324.                 {  

  325.                     stream.Close();  

  326.                 }  

  327.                 if (response != null)  

  328.                 {  

  329.                     response.Close();  

  330.                 }  

  331.             }  

  332.         }  

  333.   

  334.         /// <summary>  

  335.         /// 上傳文件到FTP服務器(斷點續傳)  

  336.         /// </summary>  

  337.         /// <param name="localFullPath">本地文件全路徑名稱:C:\Users\JianKunKing\Desktop\IronPython腳本測試工具</param>  

  338.         /// <param name="remoteFilepath">遠程文件所在文件夾路徑</param>  

  339.         /// <param name="updateProgress">報告進度的處理(第一個參數:總大小,第二個參數:當前進度)</param>  

  340.         /// <returns></returns>         

  341.         public static bool FtpUploadBroken(string localFullPath, string remoteFilepath, Action<int, int> updateProgress = null)  

  342.         {  

  343.             if (remoteFilepath == null)  

  344.             {  

  345.                 remoteFilepath = "";  

  346.             }  

  347.             string newFileName = string.Empty;  

  348.             bool success = true;  

  349.             FileInfo fileInf = new FileInfo(localFullPath);  

  350.             long allbye = (long)fileInf.Length;  

  351.             if (fileInf.Name.IndexOf("#") == -1)  

  352.             {  

  353.                 newFileName = RemoveSpaces(fileInf.Name);  

  354.             }  

  355.             else  

  356.             {  

  357.                 newFileName = fileInf.Name.Replace("#", "#");  

  358.                 newFileName = RemoveSpaces(newFileName);  

  359.             }  

  360.             long startfilesize = GetFileSize(newFileName, remoteFilepath);  

  361.             if (startfilesize >= allbye)  

  362.             {  

  363.                 return false;  

  364.             }  

  365.             long startbye = startfilesize;  

  366.             //更新進度    

  367.             if (updateProgress != null)  

  368.             {  

  369.                 updateProgress((int)allbye, (int)startfilesize);//更新進度條     

  370.             }  

  371.   

  372.             string uri;  

  373.             if (remoteFilepath.Length == 0)  

  374.             {  

  375.                 uri = "ftp://" + FtpServerIP + "/" + newFileName;  

  376.             }  

  377.             else  

  378.             {  

  379.                 uri = "ftp://" + FtpServerIP + "/" + remoteFilepath + "/" + newFileName;  

  380.             }  

  381.             FtpWebRequest reqFTP;  

  382.             // 根據uri創建FtpWebRequest對象   

  383.             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));  

  384.             // ftp用戶名和密碼   

  385.             reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);  

  386.             // 默認為true,連接不會被關閉   

  387.             // 在一個命令之后被執行   

  388.             reqFTP.KeepAlive = false;  

  389.             // 指定執行什么命令   

  390.             reqFTP.Method = WebRequestMethods.Ftp.AppendFile;  

  391.             // 指定數據傳輸類型   

  392.             reqFTP.UseBinary = true;  

  393.             // 上傳文件時通知服務器文件的大小   

  394.             reqFTP.ContentLength = fileInf.Length;  

  395.             int buffLength = 2048;// 緩沖大小設置為2kb   

  396.             byte[] buff = new byte[buffLength];  

  397.             // 打開一個文件流 (System.IO.FileStream) 去讀上傳的文件   

  398.             FileStream fs = fileInf.OpenRead();  

  399.             Stream strm = null;  

  400.             try  

  401.             {  

  402.                 // 把上傳的文件寫入流   

  403.                 strm = reqFTP.GetRequestStream();  

  404.                 // 每次讀文件流的2kb     

  405.                 fs.Seek(startfilesize, 0);  

  406.                 int contentLen = fs.Read(buff, 0, buffLength);  

  407.                 // 流內容沒有結束   

  408.                 while (contentLen != 0)  

  409.                 {  

  410.                     // 把內容從file stream 寫入 upload stream   

  411.                     strm.Write(buff, 0, contentLen);  

  412.                     contentLen = fs.Read(buff, 0, buffLength);  

  413.                     startbye += contentLen;  

  414.                     //更新進度    

  415.                     if (updateProgress != null)  

  416.                     {  

  417.                         updateProgress((int)allbye, (int)startbye);//更新進度條     

  418.                     }  

  419.                 }  

  420.                 // 關閉兩個流   

  421.                 strm.Close();  

  422.                 fs.Close();  

  423.             }  

  424.             catch  

  425.             {  

  426.                 success = false;  

  427.                 throw;  

  428.             }  

  429.             finally  

  430.             {  

  431.                 if (fs != null)  

  432.                 {  

  433.                     fs.Close();  

  434.                 }  

  435.                 if (strm != null)  

  436.                 {  

  437.                     strm.Close();  

  438.                 }  

  439.             }  

  440.             return success;  

  441.         }  

  442.   

  443.         /// <summary>  

  444.         /// 去除空格  

  445.         /// </summary>  

  446.         /// <param name="str"></param>  

  447.         /// <returns></returns>  

  448.         private static string RemoveSpaces(string str)  

  449.         {  

  450.             string a = "";  

  451.             CharEnumerator CEnumerator = str.GetEnumerator();  

  452.             while (CEnumerator.MoveNext())  

  453.             {  

  454.                 byte[] array = new byte[1];  

  455.                 array = System.Text.Encoding.ASCII.GetBytes(CEnumerator.Current.ToString());  

  456.                 int asciicode = (short)(array[0]);  

  457.                 if (asciicode != 32)  

  458.                 {  

  459.                     a += CEnumerator.Current.ToString();  

  460.                 }  

  461.             }  

  462.             string sdate = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() + System.DateTime.Now.Hour.ToString()  

  463.                 + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Second.ToString() + System.DateTime.Now.Millisecond.ToString();  

  464.             return a.Split('.')[a.Split('.').Length - 2] + "." + a.Split('.')[a.Split('.').Length - 1];  

  465.         }  

  466.         /// <summary>  

  467.         /// 獲取已上傳文件大小  

  468.         /// </summary>  

  469.         /// <param name="filename">文件名稱</param>  

  470.         /// <param name="path">服務器文件路徑</param>  

  471.         /// <returns></returns>  

  472.         public static long GetFileSize(string filename, string remoteFilepath)  

  473.         {  

  474.             long filesize = 0;  

  475.             try  

  476.             {  

  477.                 FtpWebRequest reqFTP;  

  478.                 FileInfo fi = new FileInfo(filename);  

  479.                 string uri;  

  480.                 if (remoteFilepath.Length == 0)  

  481.                 {  

  482.                     uri = "ftp://" + FtpServerIP + "/" + fi.Name;  

  483.                 }  

  484.                 else  

  485.                 {  

  486.                     uri = "ftp://" + FtpServerIP + "/" + remoteFilepath + "/" + fi.Name;  

  487.                 }  

  488.                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);  

  489.                 reqFTP.KeepAlive = false;  

  490.                 reqFTP.UseBinary = true;  

  491.                 reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);//用戶,密碼  

  492.                 reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;  

  493.                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();  

  494.                 filesize = response.ContentLength;  

  495.                 return filesize;  

  496.             }  

  497.             catch  

  498.             {  

  499.                 return 0;  

  500.             }  

  501.         }  

  502.   

  503.         //public void Connect(String path, string ftpUserID, string ftpPassword)//連接ftp  

  504.         //{  

  505.         //    // 根據uri創建FtpWebRequest對象  

  506.         //    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));  

  507.         //    // 指定數據傳輸類型  

  508.         //    reqFTP.UseBinary = true;  

  509.         //    // ftp用戶名和密碼  

  510.         //    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);  

  511.         //}  

  512.  

  513.         #endregion  

  514.   

  515.   

  516.   

  517.     }  

  518. }


該文章在 2024/1/12 21:06:19 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved