- <pre class="csharp" name="code"><pre class="csharp" name="code">using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Net;
- using System.IO;
-
- namespace JianKunKing.Common.Ftp
- {
-
-
-
- public static class FileUpDownload
- {
- #region 变量属性
-
-
-
- public static string FtpServerIP = string.Empty;
-
-
-
- public static string FtpUserID = string.Empty;
-
-
-
- public static string FtpPassword = string.Empty;
-
- #endregion
-
- #region 从FTP服务器下载文件,指定本地路径和本地文件名
-
-
-
-
-
-
-
-
- public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, Action<int, int> updateProgress = null)
- {
- FtpWebRequest reqFTP, ftpsize;
- Stream ftpStream = null;
- FtpWebResponse response = null;
- FileStream outputStream = null;
- try
- {
-
- outputStream = new FileStream(localFileName, FileMode.Create);
- if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)
- {
- throw new Exception("ftp下载目标服务器地址未设置!");
- }
- Uri uri = new Uri("ftp://" + FtpServerIP + "/" + remoteFileName);
- ftpsize = (FtpWebRequest)FtpWebRequest.Create(uri);
- ftpsize.UseBinary = true;
-
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
- reqFTP.UseBinary = true;
- reqFTP.KeepAlive = false;
- if (ifCredential)
- {
- ftpsize.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
- reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
- }
- ftpsize.Method = WebRequestMethods.Ftp.GetFileSize;
- FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse();
- long totalBytes = re.ContentLength;
- re.Close();
-
- reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
- response = (FtpWebResponse)reqFTP.GetResponse();
- ftpStream = response.GetResponseStream();
-
-
- if (updateProgress != null)
- {
- updateProgress((int)totalBytes, 0);
- }
- long totalDownloadedByte = 0;
- int bufferSize = 2048;
- int readCount;
- byte[] buffer = new byte[bufferSize];
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- while (readCount > 0)
- {
- totalDownloadedByte = readCount + totalDownloadedByte;
- outputStream.Write(buffer, 0, readCount);
-
- if (updateProgress != null)
- {
- updateProgress((int)totalBytes, (int)totalDownloadedByte);
- }
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- }
- ftpStream.Close();
- outputStream.Close();
- response.Close();
- return true;
- }
- catch (Exception)
- {
- return false;
- throw;
- }
- finally
- {
- if (ftpStream != null)
- {
- ftpStream.Close();
- }
- if (outputStream != null)
- {
- outputStream.Close();
- }
- if (response != null)
- {
- response.Close();
- }
- }
- }
-
-
-
-
-
-
-
-
-
- public static bool FtpBrokenDownload(string remoteFileName, string localFileName, bool ifCredential, long size, Action<int, int> updateProgress = null)
- {
- FtpWebRequest reqFTP, ftpsize;
- Stream ftpStream = null;
- FtpWebResponse response = null;
- FileStream outputStream = null;
- try
- {
-
- outputStream = new FileStream(localFileName, FileMode.Append);
- if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)
- {
- throw new Exception("ftp下载目标服务器地址未设置!");
- }
- Uri uri = new Uri("ftp://" + FtpServerIP + "/" + remoteFileName);
- ftpsize = (FtpWebRequest)FtpWebRequest.Create(uri);
- ftpsize.UseBinary = true;
- ftpsize.ContentOffset = size;
-
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
- reqFTP.UseBinary = true;
- reqFTP.KeepAlive = false;
- reqFTP.ContentOffset = size;
- if (ifCredential)
- {
- ftpsize.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
- reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
- }
- ftpsize.Method = WebRequestMethods.Ftp.GetFileSize;
- FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse();
- long totalBytes = re.ContentLength;
- re.Close();
-
- reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
- response = (FtpWebResponse)reqFTP.GetResponse();
- ftpStream = response.GetResponseStream();
-
-
- if (updateProgress != null)
- {
- updateProgress((int)totalBytes, 0);
- }
- long totalDownloadedByte = 0;
- int bufferSize = 2048;
- int readCount;
- byte[] buffer = new byte[bufferSize];
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- while (readCount > 0)
- {
- totalDownloadedByte = readCount + totalDownloadedByte;
- outputStream.Write(buffer, 0, readCount);
-
- if (updateProgress != null)
- {
- updateProgress((int)totalBytes, (int)totalDownloadedByte);
- }
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- }
- ftpStream.Close();
- outputStream.Close();
- response.Close();
- return true;
- }
- catch (Exception)
- {
- return false;
- throw;
- }
- finally
- {
- if (ftpStream != null)
- {
- ftpStream.Close();
- }
- if (outputStream != null)
- {
- outputStream.Close();
- }
- if (response != null)
- {
- response.Close();
- }
- }
- }
-
-
-
-
-
-
-
-
-
-
- public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, bool brokenOpen, Action<int, int> updateProgress = null)
- {
- if (brokenOpen)
- {
- try
- {
- long size = 0;
- if (File.Exists(localFileName))
- {
- using (FileStream outputStream = new FileStream(localFileName, FileMode.Open))
- {
- size = outputStream.Length;
- }
- }
- return FtpBrokenDownload(remoteFileName, localFileName, ifCredential, size, updateProgress);
- }
- catch
- {
- throw;
- }
- }
- else
- {
- return FtpDownload(remoteFileName, localFileName, ifCredential, updateProgress);
- }
- }
- #endregion
-
- #region 上传文件到FTP服务器
-
-
-
-
-
-
- public static bool FtpUploadFile(string localFullPathName, Action<int, int> updateProgress = null)
- {
- FtpWebRequest reqFTP;
- Stream stream = null;
- FtpWebResponse response = null;
- FileStream fs = null;
- try
- {
- FileInfo finfo = new FileInfo(localFullPathName);
- if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)
- {
- throw new Exception("ftp上传目标服务器地址未设置!");
- }
- Uri uri = new Uri("ftp://" + FtpServerIP + "/" + finfo.Name);
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
- reqFTP.KeepAlive = false;
- reqFTP.UseBinary = true;
- reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
- reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
- reqFTP.ContentLength = finfo.Length;
- response = reqFTP.GetResponse() as FtpWebResponse;
- reqFTP.ContentLength = finfo.Length;
- int buffLength = 1024;
- byte[] buff = new byte[buffLength];
- int contentLen;
- fs = finfo.OpenRead();
- stream = reqFTP.GetRequestStream();
- contentLen = fs.Read(buff, 0, buffLength);
- int allbye = (int)finfo.Length;
-
- if (updateProgress != null)
- {
- updateProgress((int)allbye, 0);
- }
- int startbye = 0;
- while (contentLen != 0)
- {
- startbye = contentLen + startbye;
- stream.Write(buff, 0, contentLen);
-
- if (updateProgress != null)
- {
- updateProgress((int)allbye, (int)startbye);
- }
- contentLen = fs.Read(buff, 0, buffLength);
- }
- stream.Close();
- fs.Close();
- response.Close();
- return true;
-
- }
- catch (Exception)
- {
- return false;
- throw;
- }
- finally
- {
- if (fs != null)
- {
- fs.Close();
- }
- if (stream != null)
- {
- stream.Close();
- }
- if (response != null)
- {
- response.Close();
- }
- }
- }
-
-
-
-
-
-
-
-
- public static bool FtpUploadBroken(string localFullPath, string remoteFilepath, Action<int, int> updateProgress = null)
- {
- if (remoteFilepath == null)
- {
- remoteFilepath = "";
- }
- string newFileName = string.Empty;
- bool success = true;
- FileInfo fileInf = new FileInfo(localFullPath);
- long allbye = (long)fileInf.Length;
- if (fileInf.Name.IndexOf("#") == -1)
- {
- newFileName = RemoveSpaces(fileInf.Name);
- }
- else
- {
- newFileName = fileInf.Name.Replace("#", "#");
- newFileName = RemoveSpaces(newFileName);
- }
- long startfilesize = GetFileSize(newFileName, remoteFilepath);
- if (startfilesize >= allbye)
- {
- return false;
- }
- long startbye = startfilesize;
-
- if (updateProgress != null)
- {
- updateProgress((int)allbye, (int)startfilesize);
- }
-
- string uri;
- if (remoteFilepath.Length == 0)
- {
- uri = "ftp://" + FtpServerIP + "/" + newFileName;
- }
- else
- {
- uri = "ftp://" + FtpServerIP + "/" + remoteFilepath + "/" + newFileName;
- }
- FtpWebRequest reqFTP;
-
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
-
- reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
-
-
- reqFTP.KeepAlive = false;
-
- reqFTP.Method = WebRequestMethods.Ftp.AppendFile;
-
- reqFTP.UseBinary = true;
-
- reqFTP.ContentLength = fileInf.Length;
- int buffLength = 2048;
- byte[] buff = new byte[buffLength];
-
- FileStream fs = fileInf.OpenRead();
- Stream strm = null;
- try
- {
-
- strm = reqFTP.GetRequestStream();
-
- fs.Seek(startfilesize, 0);
- int contentLen = fs.Read(buff, 0, buffLength);
-
- while (contentLen != 0)
- {
-
- strm.Write(buff, 0, contentLen);
- contentLen = fs.Read(buff, 0, buffLength);
- startbye += contentLen;
-
- if (updateProgress != null)
- {
- updateProgress((int)allbye, (int)startbye);
- }
- }
-
- strm.Close();
- fs.Close();
- }
- catch
- {
- success = false;
- throw;
- }
- finally
- {
- if (fs != null)
- {
- fs.Close();
- }
- if (strm != null)
- {
- strm.Close();
- }
- }
- return success;
- }
-
-
-
-
-
-
- private static string RemoveSpaces(string str)
- {
- string a = "";
- CharEnumerator CEnumerator = str.GetEnumerator();
- while (CEnumerator.MoveNext())
- {
- byte[] array = new byte[1];
- array = System.Text.Encoding.ASCII.GetBytes(CEnumerator.Current.ToString());
- int asciicode = (short)(array[0]);
- if (asciicode != 32)
- {
- a += CEnumerator.Current.ToString();
- }
- }
- string sdate = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() + System.DateTime.Now.Hour.ToString()
- + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Second.ToString() + System.DateTime.Now.Millisecond.ToString();
- return a.Split('.')[a.Split('.').Length - 2] + "." + a.Split('.')[a.Split('.').Length - 1];
- }
-
-
-
-
-
-
- public static long GetFileSize(string filename, string remoteFilepath)
- {
- long filesize = 0;
- try
- {
- FtpWebRequest reqFTP;
- FileInfo fi = new FileInfo(filename);
- string uri;
- if (remoteFilepath.Length == 0)
- {
- uri = "ftp://" + FtpServerIP + "/" + fi.Name;
- }
- else
- {
- uri = "ftp://" + FtpServerIP + "/" + remoteFilepath + "/" + fi.Name;
- }
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
- reqFTP.KeepAlive = false;
- reqFTP.UseBinary = true;
- reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
- reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- filesize = response.ContentLength;
- return filesize;
- }
- catch
- {
- return 0;
- }
- }
-
-
-
-
-
-
-
-
-
-
-
- #endregion
-
-
-
- }
- }</pre><br></pre>
- <pre class="csharp" name="code">using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Net;
- using System.IO;
-
- namespace JianKunKing.Common.Ftp
- {
-
-
-
- public static class FileUpDownload
- {
- #region 变量属性
-
-
-
- public static string FtpServerIP = string.Empty;
-
-
-
- public static string FtpUserID = string.Empty;
-
-
-
- public static string FtpPassword = string.Empty;
-
- #endregion
-
- #region 从FTP服务器下载文件,指定本地路径和本地文件名
-
-
-
-
-
-
-
-
- public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, Action<int, int> updateProgress = null)
- {
- FtpWebRequest reqFTP, ftpsize;
- Stream ftpStream = null;
- FtpWebResponse response = null;
- FileStream outputStream = null;
- try
- {
-
- outputStream = new FileStream(localFileName, FileMode.Create);
- if (FtpServerIP == null || FtpServerIP.Trim().Length == 0)
- {
- throw new Exception("ftp下载目标服务器地址未设置!");
- }
- Uri uri = new Uri("ftp://" + FtpServerIP + "/" + remoteFileName);
- ftpsize = (FtpWebRequest)FtpWebRequest.Create(uri);
- ftpsize.UseBinary = true;
-
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
- reqFTP.UseBinary = true;
- reqFTP.KeepAlive = false;
- if (ifCredential)
- {
- ftpsize.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
- reqFTP.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
- }
- ftpsize.Method = WebRequestMethods.Ftp.GetFileSize;
- FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse();
- long totalBytes = re.ContentLength;
- re.Close();
-
- reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
- response = (FtpWebResponse)reqFTP.GetResponse();
- ftpStream = response.GetResponseStream();
-
-
- if (updateProgress != null)
- {
- updateProgress((int)totalBytes, 0);
- }
- long totalDownloadedByte = 0;
- int bufferSize = 2048;
- int readCount;
- byte[] buffer = new byte[bufferSize];
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- while (readCount > 0)
- {
- totalDownloadedByte = readCount + totalDownloadedByte;
- outputStream.Write(buffer, 0, readCount);
-
- if (updateProgress != null)
- {
- updateProgress((int)totalBytes, (int)totalDownloadedByte);
- }
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- }
- ftpStream.Close();
- outputStream.Close();
- response.Close();
- return true;
- }
- catch (Exception)
- {
- return false;
- throw;
- }
- finally
- {
- if (ftpStream != null)
- {
- ftpStream.Close();
- }
- if (outputStream != null)
- {
- outputStream.Close();
- }
- if (response != null)
- {
- response.Close();
- }
- }
- }
-
-
-
-
|
请发表评论