zoukankan      html  css  js  c++  java
  • 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();

            }

        }

  • 相关阅读:
    使用ShareSDK完成第三方(QQ、微信、微博)登录和分享
    Https适配
    AFNetworking实现程序重新启动时的断点续传
    开源Word读写组件DocX 的深入研究和问题总结
    ITTC数据挖掘平台介绍(四) 框架改进和新功能
    聪明的投资者读书笔记1
    word中公式居中编号在最右端
    tensorflow中使用Batch Normalization
    财务自由之路读书笔记二
    mybatis与mysql中的Date和String之间转换
  • 原文地址:https://www.cnblogs.com/qingzhibin/p/4182682.html
Copyright © 2011-2022 走看看