C#FTP文件上传操作

public class FTP

    {

        static FtpWebRequest reqFTP;

        static WebResponse response;

        static StreamReader ftpStream;

        static Stream strm;

        static FileStream fs;

        //const string temp = "temp";

        static string filenametemp = "";

        static string ftpServerIP = ConfigurationManager.AppSettings["ftpIP"];

        static string ftpUserID = ConfigurationManager.AppSettings["ftpUid"];

        static string ftpPassword = ConfigurationManager.AppSettings["ftpPwd"];

        /// <summary>

        /// 上传

        /// </summary>

        /// <param name="path">绝对路径</param>

        /// <param name="filename">经销商文件夹名称</param>

        /// <returns></returns>

        public static bool Upload(string path,string filename)

        {

            bool bol = false;

            string ftppath= @"ftp://" + ftpServerIP;

            //fileRename(ftppath, "Test1", temp);

            if (CheckFTPFile(filename, ftppath))

            {

                if (StatusUpLoad("", filename, path, ftppath))

                {

                    bol = true;

                }

            }

            else

            {

                if (CreateFile(ftppath + "/" + filename))

                {

                    if (!CheckFTPFile("Advert", ftppath + "/" + filename))

                    {

                        CreateFile(ftppath + "/" + filename + "/Advert");//创建广告文件夹

                    }

                    if (!CheckFTPFile("Attachments", ftppath + "/" + filename))

                    {

                        CreateFile(ftppath + "/" + filename + "/Attachments");//创建附件文件夹

                    }

                    if (StatusUpLoad("", filename, path, ftppath))

                    {

                        bol = true;

                    }

                }

            }

            return bol;

        }

        /// <summary>

        /// 上传到ftp

        /// </summary>

        /// <param name="filename"></param>

        /// <param name="filename"></param>

        /// <param name="path"></param>

        /// <param name="ftppath"></param>

        /// <param name="ftpUserID"></param>

        /// <param name="ftpPassword"></param>

        /// <returns></returns>

        private static bool StatusUpLoad(string AdorAt,string filename,string path, string ftppath)

        {

            bool bol = false;

            string url = "";

            string _newpath = "";

            FileInfo fileInf = new FileInfo(path);

            if (AdorAt == "Advert" && AdorAt == "Attachments")

            {

                url = ftppath + "/" + filename + "/" + AdorAt + "/" + fileInf.Name;

            }

            else

            {

                _newpath = CheckFTPFileChildren(ftppath + "/" + filename);

                if (_newpath != "")

                {

                    url = _newpath + "/" + fileInf.Name;

                }

                else

                {

                    new Exception();

                }

            }

            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));

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

            reqFTP.KeepAlive = false;

            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

            reqFTP.UseBinary = true;

            reqFTP.ContentLength = fileInf.Length;

            int buffLength = 2048;

            byte[] buff = new byte[buffLength];

            int contentLen;

            fs = fileInf.OpenRead();

            try

            {

                strm = reqFTP.GetRequestStream();

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

                while (contentLen != 0)

                {

                    strm.Write(buff, 0, contentLen);

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

                }

                strm.Close();

                fs.Close();

                bol = true;

            }

            catch (Exception ex)

            {

                bol = false;

            }

            return bol;

        }

       

        /// <summary>

        /// 判断一级文件夹是否存在

        /// </summary>

        /// <param name="fileName">要判断的文件名</param>

        /// <param name="strFTPPath">ftp路径</param>

        /// <param name="ftpUserID"></param>

        /// <param name="ftpPassword"></param>

        /// <returns></returns>

        public static bool CheckFTPFile(string fileName, string strFTPPath)

        {

            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFTPPath));

            reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

            reqFTP.UseBinary = true;

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

            response = (FtpWebResponse)reqFTP.GetResponse();

            ftpStream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);

            List<string> files = new List<string>();

            string line = ftpStream.ReadLine();

            while (line != null)

            {

                if (line.Contains("<DIR>"))

                {

                    files.Add(line);

                }

                line = ftpStream.ReadLine();

            }

            response.Close();

            ftpStream.Close();

            bool fag = false;

            for (int i = 0; i < files.Count; i++)

            {

                string[] strfiles = files[i].Split(' ');

                string file = strfiles[strfiles.Length - 1];

                if (file == fileName)

                {

                    fag = true;

                    break;

                }

            }

            return fag;

        }

 

        /// <summary>

        /// 判断文件是否存在

        /// </summary>

        /// <param name="fileName">文件</param>

        /// <param name="strFTPPath">路径</param>

        /// <param name="ftpUserID"></param>

        /// <param name="ftpPassword"></param>

        /// <returns></returns>

        public static string CheckFTPFileChildren(string strFTPPath)

        {

            int number;

            string urlpath = "";

            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFTPPath));

            reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

            reqFTP.UseBinary = true;

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

            try

            {

                response = (FtpWebResponse)reqFTP.GetResponse();

                ftpStream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);

                List<string> files = new List<string>();

                string line = ftpStream.ReadLine();

                while (line != null)

                {

                    if (line.Contains("<DIR>"))

                    {

                        files.Add(line);

                    }

                    line = ftpStream.ReadLine();

                }

                response.Close();

                ftpStream.Close();

                bool fag = false;

                int count = files.Count;

                for (int i = 0; i < files.Count; i++)

                {

                    string[] strfiles = files[i].Split(' ');

                    string file = strfiles[strfiles.Length - 1];

                    if (file != "Advert" && file != "Attachments")

                    {

                        number = CheckFileNumber(strFTPPath + "/" + file);

                        if (number < 20)

                        {

                            urlpath = strFTPPath + "/" + file;

                            fag = true;

                            break;

                        }

                    }

                }

                if (!fag)

                {

                    while (true)

                    {

                        urlpath = strFTPPath + "/" + (count - 1);

                        if (CreateFile(urlpath))

                        {

                            filenametemp = (count - 1).ToString();

                            break;

                        }

                        count++;

                    }

                }

            }

            catch

            {

                urlpath = "";

            }

            return urlpath;

        }

        /// <summary>

        /// 判断数量

        /// </summary>

        /// <param name="strFTPPath"></param>

        /// <param name="ftpUserID"></param>

        /// <param name="ftpPassword"></param>

        /// <returns></returns>

        public static int CheckFileNumber(string strFTPPath)

        {

            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFTPPath));

            reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

            reqFTP.UseBinary = true;

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

            response = (FtpWebResponse)reqFTP.GetResponse();

            ftpStream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);

            List<string> files = new List<string>();

            string line = ftpStream.ReadLine();

            while (line != null)

            {

                if (!line.Contains("<DIR>"))

                {

                    files.Add(line);

                }

                line = ftpStream.ReadLine();

            }

            response.Close();

            ftpStream.Close();

            return files.Count;

        }

        /// <summary>

        /// 创建文件夹

        /// </summary>

        /// <param name="dirName"></param>

        public static bool CreateFile(string strFTPPath)

        {

            try

            {

                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFTPPath));

                reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;

                reqFTP.UseBinary = true;

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

                response = (FtpWebResponse)reqFTP.GetResponse();

                strm = response.GetResponseStream();

                strm.Close();

                response.Close();

                return true;

            }

            catch (Exception ex)

            {

                return false;

            }

        }

 

        /// <summary>

        /// 删除文件

        /// </summary> ftppath=ftppath+"//Test\\6ec5069d-7f17-4ce4-852b-0e1d996aca2f.jpg";

        /// <param name="fileName"></param>

        public static bool DeleteFile(string path)

        {

            try

            {

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

                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpUserID);

                reqFTP.KeepAlive = false;

                reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;

                string result = String.Empty;

                response = (FtpWebResponse)reqFTP.GetResponse();

                long size = response.ContentLength;

                strm = response.GetResponseStream();

                ftpStream = new StreamReader(strm);

                result = ftpStream.ReadToEnd();

                strm.Close();

                ftpStream.Close();

                response.Close();

                return true;

            }

            catch (Exception ex)

            {

                return false;

            }

        }

 

        public static void fileRename(string ftpPath, string oldFileName, string newFileName)

        {

            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath + "/" + oldFileName));

            reqFTP.Method = WebRequestMethods.Ftp.Rename;

            reqFTP.UseBinary = true;

            reqFTP.RenameTo = newFileName;

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

            response = (FtpWebResponse)reqFTP.GetResponse();

            strm = response.GetResponseStream();

            response.Close();

            strm.Close();

        }

    }

posted @ 2014-12-24 16:08  ~随风~  阅读(850)  评论(0编辑  收藏  举报