文件上传FTP 读取文件

        /// <summary>
        /// 上传文件到FTP上
        /// </summary>
        /// <returns></returns>
        public static string UpFileToFTP<T>(T obj, string fileName, string ftpSetcer, out string msg)
        {
            msg = string.Empty;
            //var ftpServerIP = CommonConst.FTPService;
            FtpWebRequest reqFTP;
            try
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpSetcer + "out/" + fileName));
                reqFTP.Credentials = new NetworkCredential(CommonConst.CoscoFtpAcount, CommonConst.CoscoAcountPwd);
                reqFTP.KeepAlive = false;
                reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
                reqFTP.UseBinary = true;


                var utf8WithoutBom = new UTF8Encoding(false);
                Stream strm = reqFTP.GetRequestStream();
                Type t = obj.GetType();
                XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                ns.Add("", "");
                XmlSerializer serializer = new XmlSerializer(t);
                XmlTextWriter writer = new XmlTextWriter(strm, utf8WithoutBom);
                writer.Formatting = Formatting.Indented;
                serializer.Serialize(writer, obj, ns);
                strm.Close();
                return "success";
            }
            catch (Exception ex)
            {
                msg = "ftp上传失败 :" + ex.Message;
                return "ftp上传失败";
            }
        }


        /// <summary>
        /// 去除文件bom头后的字符
        /// </summary>
        /// <param name="buffer"></param>
        /// <returns></returns>
        public static string GetUTF8String(byte[] buffer)
        {
            if (buffer == null)
                return null;

            if (buffer.Length <= 3)
            {
                return Encoding.UTF8.GetString(buffer);
            }

            byte[] bomBuffer = new byte[] { 0xef, 0xbb, 0xbf };

            if (buffer[0] == bomBuffer[0]
                && buffer[1] == bomBuffer[1]
                && buffer[2] == bomBuffer[2])
            {
                return new UTF8Encoding(false).GetString(buffer, 3, buffer.Length - 3);
            }

            return Encoding.UTF8.GetString(buffer);
        }

        /// <summary>
        /// 从ftp服务器上获得文件列表
        /// </summary>
        /// <param name="RequedstPath">服务器下的相对路径</param>
        /// <returns></returns>
        public static List<string> GetFile(out string msgerr)
        {
            var strs = new List<string>();
            msgerr = string.Empty;
            string uri = CommonConst.FTPService + "in";   //目标路径 path为服务器地址
            try
            {
                FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                // ftp用户名和密码
                reqFTP.Credentials = new NetworkCredential(CommonConst.CoscoFtpAcount, CommonConst.CoscoAcountPwd);
                reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                WebResponse response = reqFTP.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名

                string line = reader.ReadLine();
                while (line != null)
                {
                    if (!line.Contains("<DIR>"))
                    {
                        string msg = line.Substring(39).Trim();
                        if (msg.ToUpper().Contains("BCXML"))
                        {
                            strs.Add(msg);
                        }
                        //strs.Add(msg);
                    }
                    line = reader.ReadLine();
                }
                reader.Close();
                response.Close();
                return strs;
            }
            catch (Exception ex)
            {
                msgerr = "ftpAddress +> " + uri + "  Exception =>" + ex.Message;
            }
            return strs;
        }


        /// <summary>
        /// 从ftp服务器上获取文件并将内容全部转换成string返回
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="dir"></param>
        /// <returns></returns> 
        public static string GetFileStr(string fileName, out string msg)
        {
            FtpWebRequest reqFTP;
            msg = string.Empty;
            string uri = CommonConst.FTPService + "in/";   //目标路径 path为服务器地址
            try
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri + fileName));
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(CommonConst.CoscoFtpAcount, CommonConst.CoscoAcountPwd);
                reqFTP.UsePassive = true;  //选择主动还是被动模式 ,  这句要加上的。
                reqFTP.KeepAlive = false;//一定要设置此属性,否则一次性下载多个文件的时候,会出现异常。
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(ftpStream);
                //XmlSerializer xs = new XmlSerializer(typeof(T));
                //var result = (T)xs.Deserialize(reader);

                var result = reader.ReadToEnd();
                reader.Close();
                ftpStream.Close();
                response.Close();
                return result;
            }
            catch (Exception ex)
            {
                msg = "解析XML失败";
                return "解析XML失败" + ex.Message;
            }
        }


        /// <summary>
        /// 读取文件目录下所有的文件名称,包括文件夹名称
        /// </summary>
        /// <param name="ftpAdd">传过来的文件夹路径</param>
        /// <returns>返回的文件或文件夹名称</returns>
        public static string[] GetFtpFileList(string ftpAdd)
        {

            string url = CommonConst.FTPService + "in";
            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(url));
            ftpRequest.UseBinary = true;
            ftpRequest.Credentials = new NetworkCredential(CommonConst.CoscoFtpAcount, CommonConst.CoscoAcountPwd);

            if (ftpRequest != null)
            {
                StringBuilder fileListBuilder = new StringBuilder();
                ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;//只得到文件或文件夹的名称
                try
                {

                    WebResponse ftpResponse = ftpRequest.GetResponse();
                    StreamReader ftpFileListReader = new StreamReader(ftpResponse.GetResponseStream(), Encoding.Default);

                    string line = ftpFileListReader.ReadLine();
                    while (line != null)
                    {
                        fileListBuilder.Append(line);
                        fileListBuilder.Append("@");//每个文件名称之间用@符号隔开,便于前端调用的时候解析
                        line = ftpFileListReader.ReadLine();
                    }
                    ftpFileListReader.Close();
                    ftpResponse.Close();
                    fileListBuilder.Remove(fileListBuilder.ToString().LastIndexOf("@"), 1);
                    return fileListBuilder.ToString().Split('@');//返回得到的数组
                }
                catch (Exception ex)
                {
                    return null;
                }
            }
            else
            {
                return null;
            }
        }


        public static void DownLoadFileFromFTP()
        {
            string filePath = "d:\\";
            string fileName = "lhking.txt"; //文件下载之后要保存的路径和文件名
            FtpWebRequest reqFTP;
            try
            {

                var ftpServerIP = CommonConst.FTPService;
                FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
                string filename = "ip.txt";
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServerIP + "in/" + filename));
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential("l", "l");

                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                long cl = response.ContentLength;
                int bufferSize = 2048;
                int readCount;
                byte[] buffer = new byte[bufferSize];

                readCount = ftpStream.Read(buffer, 0, bufferSize);
                while (readCount > 0)
                {
                    outputStream.Write(buffer, 0, readCount);
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                }
                ftpStream.Close();
                outputStream.Close();
                response.Close();
            }
            catch (Exception err)
            {
                //MessageBox.Show(err.Message, "Download Error");
            }
        }
 

猜你喜欢

转载自blog.csdn.net/lygachao/article/details/83185286
今日推荐