Пример #1
0
        /// <summary>
        /// 判斷指定的文件是否存在
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public bool IsExists(FtpParameter p)
        {
            string name = ComFunc.FindFileName(p.FTP_URL);
            string dir  = p.FTP_URL;

            if (name.Length > 0)
            {
                dir = dir.Replace(name, "");
            }

            StringStd l = ListDirectory(p);

            StringStd[]      ls    = l.Split("\r\n");
            List <StringStd> lists = new List <StringStd>();

            foreach (StringStd s in ls)
            {
                lists.Add(s.ToUpper());
            }

            if (lists.Contains(name.ToUpper()))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Пример #2
0
        private void InitByParameters(FtpParameter p)
        {
            ftpRequest = (FtpWebRequest)WebRequest.Create(p.FTP_URL);

            if (p.Login_UserId != "")
            {
                ftpRequest.Credentials = new NetworkCredential(p.Login_UserId, p.Login_Password);
            }
            ftpRequest.UseBinary  = p.UseBinary;
            ftpRequest.KeepAlive  = p.KeepAlive;
            ftpRequest.UsePassive = p.UsePassive;
            ftpRequest.Timeout    = p.TimeOut;
            encoding = Encoding.GetEncoding(p.EncodingString);
        }
Пример #3
0
 //创建目录
 public Boolean FtpMakeDir(FtpParameter p)
 {
     InitByParameters(p);
     ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
     try
     {
         FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
         response.Close();
     }
     finally
     {
         Release();
     }
     return(true);
 }
Пример #4
0
        /// <summary>
        /// 獲取指定文件的size
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public string FileSize(FtpParameter p)
        {
            string rtn = "";

            try
            {
                InitByParameters(p);
                ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize;
                FtpWebResponse listResponse =
                    (FtpWebResponse)ftpRequest.GetResponse();

                rtn = listResponse.ContentLength.ToString();
            }
            finally
            {
                Release();
            }

            return(rtn);
        }
Пример #5
0
        private void SendFileToFtp(FtpParameter ftpParams)
        {
            FtpWebRequest requestFtp = (FtpWebRequest)WebRequest.Create(ftpParams.FtpPath + ftpParams.FileName);

            requestFtp.Method      = WebRequestMethods.Ftp.UploadFile;
            requestFtp.KeepAlive   = ftpParams.KeepAlive;
            requestFtp.UsePassive  = ftpParams.UsePassive;
            requestFtp.Credentials = new NetworkCredential(ftpParams.Username, ftpParams.Password);
            StreamReader strmLectura = new StreamReader(ftpParams.FilePath + ftpParams.FileName);

            byte[] bInfoArchivo = Encoding.UTF8.GetBytes(strmLectura.ReadToEnd());
            strmLectura.Close();
            requestFtp.ContentLength = bInfoArchivo.Length;
            Stream strmRequest = requestFtp.GetRequestStream();

            strmRequest.Write(bInfoArchivo, 0, bInfoArchivo.Length);
            strmRequest.Close();
            FtpWebResponse response = (FtpWebResponse)requestFtp.GetResponse();

            response.Close();
        }
Пример #6
0
        public void SendFileToFtp(string filePath, string fileName, string keyPathFtp, string username, string password)
        {
            try
            {
                FtpParameter ftpParameter = new FtpParameter
                {
                    KeepAlive  = false,
                    UsePassive = false,
                    FileName   = fileName,
                    FilePath   = filePath,
                    FtpPath    = keyPathFtp,
                    Username   = username,
                    Password   = password
                };

                SendFileToFtp(ftpParameter);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
Пример #7
0
        /// <summary>
        /// 從fpt上找到對應的存在文件的名稱,以便忽略大小寫,提供給download方法使用
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        protected string FindMappingFileName(FtpParameter p)
        {
            string name = ComFunc.FindFileName(p.FTP_URL);
            string dir  = p.FTP_URL;

            if (name.Length > 0)
            {
                dir = dir.Replace(name, "");
            }

            string l = ListDirectory(p);

            string[] ls = l.Split("\r\n");
            Dictionary <string, string> lists = new Dictionary <string, string>();

            foreach (StringStd s in ls)
            {
                lists.Add(s.ToUpper(), s);
            }

            return(lists[name.ToUpper()] == null ? "" : lists[name.ToUpper()]);
        }
Пример #8
0
        /// <summary>
        /// list出ftp的目錄
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public string ListDirectory(FtpParameter p)
        {
            string rtn = "";

            try
            {
                InitByParameters(p);

                ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
                FtpWebResponse listResponse =
                    (FtpWebResponse)ftpRequest.GetResponse();

                reader = new StreamReader(listResponse.GetResponseStream(), encoding);
                rtn    = reader.ReadToEnd();
            }
            finally
            {
                Release();
            }

            return(rtn);
        }
Пример #9
0
        //判断文件的目录是否存,不存则创建
        private void FtpCheckDirectoryExist(FtpParameter p)
        {
            string fullDir = FtpParseDirectory(p.FTP_URL);

            string[] dirs   = fullDir.Split('/');
            string   curDir = dirs[0] + "//" + dirs[2] + "/";

            for (int i = 3; i < dirs.Length; i++)
            {
                string dir = dirs[i];
                //如果是以/开始的路径,第一个为空
                if (dir != null && dir.Length > 0)
                {
                    curDir += dir + "/";

                    var ftpRequest = (FtpWebRequest)WebRequest.Create(curDir);
                    ftpRequest.Proxy  = null;
                    ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;

                    try
                    {
                        if (p.Login_UserId != "")
                        {
                            ftpRequest.Credentials = new NetworkCredential(p.Login_UserId, p.Login_Password);
                        }
                        FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
                        response.Close();
                    }
                    catch (Exception ex)
                    {
                    }
                    finally
                    {
                        ftpRequest.Abort();
                    }
                }
            }
        }
Пример #10
0
        /// <summary>
        /// 獲取指定url下所有文件的size
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public Dictionary <string, object> ListFileSize(FtpParameter p)
        {
            Dictionary <string, object> rtn = new Dictionary <string, object>();

            InitByParameters(p);
            string listd = ListDirectory(p);

            listd = listd.Replace("\r", "");
            string[] arraryd = listd.Split('\n');

            for (int i = 0; i < arraryd.Length; i++)
            {
                if (arraryd[i].Length <= 0)
                {
                    continue;
                }

                string filename = "";
                //Unix格式专用
                if (arraryd[i].Trim().IndexOf("/") >= 0)
                {
                    string[] ss = arraryd[i].Trim().Split('/');
                    filename = ss[ss.Length - 1];
                }
                else
                {
                    filename = arraryd[i].Trim();
                }

                string fileurl  = p.FTP_URL + "/" + filename;
                string filesize = FileSize(p);
                rtn[arraryd[i]] = filesize;
            }


            return(rtn);
        }
Пример #11
0
        /// <summary>
        /// 文件上传
        /// </summary>
        /// <param name="p"></param>
        /// <param name="fileStream"></param>
        /// <param name="processsing">上传过程中的处理事件</param>
        /// <param name="end">上传完成的处理事件</param>
        /// <param name="reserveObject">传入的保留参数对象</param>
        public void Upload(FtpParameter p, Stream fileStream, Action <FTPStatusData> processsing, Action <FTPStatusData> end, object reserveObject)
        {
            try
            {
                FtpCheckDirectoryExist(p);
                InitByParameters(p);

                ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;

                // UploadFile is not supported through an Http proxy
                // so we disable the proxy for this request.
                ftpRequest.Proxy = null;

                stream = ftpRequest.GetRequestStream();

                byte[] buffer = new byte[p.BufferSize];
                int    bytesRead;
                long   transfer  = 0;
                double speed     = 0;
                var    st        = DateTime.Now;
                var    totalbyte = fileStream.Length;
                while (true)
                {
                    bytesRead = fileStream.Read(buffer, 0, buffer.Length);
                    if (bytesRead == 0)
                    {
                        break;
                    }
                    stream.Write(buffer, 0, bytesRead);

                    transfer += bytesRead;


                    if (processsing != null)
                    {
                        var fsd = new FTPStatusData();
                        fsd.CurrentByteLength    = bytesRead;
                        fsd.TransferedByteLength = transfer;
                        fsd.TotalByteLength      = totalbyte;
                        fsd.FileName             = Path.GetFileName(p.FTP_URL);
                        fsd.CostTime             = DateTime.Now - st;
                        var s = fsd.CostTime.TotalMilliseconds;
                        if (s != 0)
                        {
                            speed = (double)transfer / s * 1000;
                        }
                        fsd.Speed         = speed;
                        fsd.CurrentStatus = FTPStatusData.FtpStaus.Processing;
                        fsd.ReserveObject = reserveObject;

                        processsing(fsd);
                    }
                }

                // The request stream must be closed before getting
                // the response.
                stream.Close();

                ftpResponse =
                    (FtpWebResponse)ftpRequest.GetResponse();

                if (end != null)
                {
                    var fsd = new FTPStatusData();
                    fsd.CurrentByteLength    = bytesRead;
                    fsd.TransferedByteLength = transfer;
                    fsd.TotalByteLength      = totalbyte;
                    fsd.FileName             = Path.GetFileName(p.FTP_URL);
                    fsd.CostTime             = DateTime.Now - st;
                    var s = fsd.CostTime.TotalMilliseconds;
                    if (s != 0)
                    {
                        speed = (double)transfer / s * 1000;
                    }
                    fsd.Speed         = speed;
                    fsd.CurrentStatus = FTPStatusData.FtpStaus.End;
                    fsd.ReserveObject = reserveObject;

                    end(fsd);
                }
            }
            finally
            {
                Release();
            }
        }
Пример #12
0
 /// <summary>
 /// 文件上传
 /// </summary>
 /// <param name="p"></param>
 /// <param name="fileStream"></param>
 public void Upload(FtpParameter p, Stream fileStream)
 {
     Upload(p, fileStream, null, null, null);
 }
Пример #13
0
 /// <summary>
 /// 上傳文件,FTP_URL,Upload_FilePath必須有傳入,否則報異常
 /// </summary>
 /// <param name="p"></param>
 public void Upload(FtpParameter p)
 {
     Upload(p, null, null, null);
 }
Пример #14
0
        /// <summary>
        /// 下载文件,返回数据流
        /// </summary>
        /// <param name="p"></param>
        /// <param name="processsing"></param>
        /// <param name="end"></param>
        /// <param name="reserveObject"></param>
        /// <returns></returns>
        public MemoryStream DownLoadStream(FtpParameter p, Action <FTPStatusData> processsing, Action <FTPStatusData> end, object reserveObject)
        {
            try
            {
                string name = ComFunc.FindFileName(p.FTP_URL);
                string dir  = p.FTP_URL;
                if (name.Length > 0)
                {
                    dir = dir.Replace(name, "");
                }

                //忽略文件名稱大小寫的處理
                //if (name.ToUpper() != name)
                //{
                //    name = FindMappingFileName(p);
                //}

                InitByParameters(p);

                ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
                FtpWebResponse downloadResponse =
                    (FtpWebResponse)ftpRequest.GetResponse();

                stream = downloadResponse.GetResponseStream();

                string fileName =
                    Path.GetFileName(ftpRequest.RequestUri.AbsolutePath);

                MemoryStream rtn = null;
                if (fileName.Length == 0)
                {
                    rtn = new MemoryStream();
                }
                else
                {
                    //如果有指定文件名称
                    rtn = new MemoryStream();

                    byte[] buffer = new byte[p.BufferSize];
                    int    bytesRead;
                    long   transfer  = 0;
                    double speed     = 0;
                    var    st        = DateTime.Now;
                    var    totalbyte = fileStream.Length;
                    while (true)
                    {
                        bytesRead = stream.Read(buffer, 0, buffer.Length);
                        if (bytesRead == 0)
                        {
                            break;
                        }
                        rtn.Write(buffer, 0, bytesRead);

                        transfer += bytesRead;


                        if (processsing != null)
                        {
                            var fsd = new FTPStatusData();
                            fsd.CurrentByteLength    = bytesRead;
                            fsd.TransferedByteLength = transfer;
                            fsd.TotalByteLength      = totalbyte;
                            fsd.FileName             = Path.GetFileName(name);
                            fsd.CostTime             = DateTime.Now - st;
                            var s = fsd.CostTime.TotalMilliseconds;
                            if (s != 0)
                            {
                                speed = (double)transfer / s * 1000;
                            }
                            fsd.Speed         = speed;
                            fsd.CurrentStatus = FTPStatusData.FtpStaus.Processing;
                            fsd.ReserveObject = reserveObject;

                            processsing(fsd);
                        }
                    }

                    if (end != null)
                    {
                        var fsd = new FTPStatusData();
                        fsd.CurrentByteLength    = bytesRead;
                        fsd.TransferedByteLength = transfer;
                        fsd.TotalByteLength      = totalbyte;
                        fsd.FileName             = Path.GetFileName(name);
                        fsd.CostTime             = DateTime.Now - st;
                        var s = fsd.CostTime.TotalMilliseconds;
                        if (s != 0)
                        {
                            speed = (double)transfer / s * 1000;
                        }
                        fsd.Speed         = speed;
                        fsd.CurrentStatus = FTPStatusData.FtpStaus.End;
                        fsd.ReserveObject = reserveObject;

                        end(fsd);
                    }
                }

                return(rtn);
            }
            finally
            {
                Release();
            }
        }
Пример #15
0
 /// <summary>
 /// 下载文件,返回数据流
 /// </summary>
 /// <param name="p"></param>
 /// <returns></returns>
 public MemoryStream DownLoadStream(FtpParameter p)
 {
     return(DownLoadStream(p, null, null, null));
 }
Пример #16
0
 /// <summary>
 /// 下載文件,FTP_URL,DownLoad_Path,DownLoad_FileName必須有傳入,否則報異常
 /// 如果发现下载的目录有同名档将删除同名档
 /// </summary>
 /// <param name="p"></param>
 public void DownLoad(FtpParameter p)
 {
     DownLoad(p, null, null, null);
 }