using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Threading; using Models; using Microsoft.AspNetCore.Http; namespace COMMON { /// /// ftp 帮助类 /// public static class FtpHelper { //基本设置 static private string path => ConfigEntity.Instance.FTPPATH; //目标路径 static private string ftpip => ConfigEntity.Instance.FTPIP; //ftp IP地址 static private string username => ConfigEntity.Instance.FTPUSERNAME; //ftp用户名 static private string password => ConfigEntity.Instance.FTPPASSWORD; //ftp密码 /// /// 获取ftp上面的文件和文件夹 /// /// /// public static string[] GetFileList(string dir) { StringBuilder result = new StringBuilder(); FtpWebRequest request; request = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpip + Path.Combine(path, dir))); request.UseBinary = true; request.Credentials = new NetworkCredential(username, password);//设置用户名和密码 request.Method = WebRequestMethods.Ftp.ListDirectory; request.UseBinary = true; WebResponse response = request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); string line = reader.ReadLine(); while (line != null) { result.Append(line); result.Append("\n"); line = reader.ReadLine(); } // to remove the trailing '\n' result.Remove(result.ToString().LastIndexOf('\n'), 1); reader.Close(); response.Close(); return result.ToString().Split('\n'); } /// /// 获取文件大小 /// /// ip服务器下的相对路径 /// 文件大小 public static int GetFileSize(string file) { try { StringBuilder result = new StringBuilder(); FtpWebRequest request; string URL = ftpip + path +file.Replace("\\", "/"); request = (FtpWebRequest)FtpWebRequest.Create(new Uri(URL)); request.UseBinary = true; request.Credentials = new NetworkCredential(username, password);//设置用户名和密码 request.Method = WebRequestMethods.Ftp.GetFileSize; int dataLength = (int)request.GetResponse().ContentLength; return dataLength; } catch (Exception) { return -1; } } /// /// 文件上传 /// /// 目标文件夹:服务器下的相对路径 不填为根目录 /// 目标文件夹:服务器下的相对路径 不填为根目录 /// 目标文件夹:服务器下的相对路径 不填为根目录 public static bool FileUpLoad(FileStream fs, string newname, string objPath = "") { string url = ftpip + path; if (objPath != "") url += objPath + "/"; try { FtpWebRequest reqFTP = null; //待上传的文件 (全路径) try { using (fs) { long length = fs.Length; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + newname)); //设置连接到FTP的帐号密码 reqFTP.Credentials = new NetworkCredential(username, password); //设置请求完成后是否保持连接 reqFTP.KeepAlive = false; //指定执行命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; //指定数据传输类型 reqFTP.UseBinary = true; using (Stream stream = reqFTP.GetRequestStream()) { //设置缓冲大小 int BufferLength = 5120; byte[] b = new byte[BufferLength]; int i; while ((i = fs.Read(b, 0, BufferLength)) > 0) { stream.Write(b, 0, i); } Console.WriteLine("上传文件成功"); } } } catch (Exception ex) { Console.WriteLine("上传文件失败错误为" + ex.Message); return false; } finally { } } catch (Exception ex) { Console.WriteLine("上传文件失败错误为" + ex.Message); return false; } finally { } return true; } /// /// 文件上传 /// /// 原路径(绝对路径)包括文件名 /// 目标文件夹:服务器下的相对路径 不填为根目录 /// 目标文件夹:服务器下的相对路径 不填为根目录 public static bool FileUpLoad(string filePath,string newname, string objPath = "") { string url = ftpip + path; if (objPath != "") url += objPath + "/"; FtpWebRequest reqFTP = null; //待上传的文件 (全路径) FileInfo fileInfo = new FileInfo(filePath); using (FileStream fs = fileInfo.OpenRead()) { long length = fs.Length; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + newname)); //设置连接到FTP的帐号密码 reqFTP.Credentials = new NetworkCredential(username, password); //设置请求完成后是否保持连接 reqFTP.KeepAlive = false; //指定执行命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; //指定数据传输类型 reqFTP.UseBinary = true; using (Stream stream = reqFTP.GetRequestStream()) { //设置缓冲大小 int BufferLength = 5120; byte[] b = new byte[BufferLength]; int i; while ((i = fs.Read(b, 0, BufferLength)) > 0) { stream.Write(b, 0, i); } Console.WriteLine("上传文件成功"); } } return true; } /// /// 删除文件 /// /// 服务器下的相对路径 包括文件名 public static bool DeleteFileName(string fileName) { string URL = ftpip + path+ fileName.Replace("\\", "/"); FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(URL)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(username, password); // 默认为true,连接不会被关闭 // 在一个命令之后被执行 reqFTP.KeepAlive = false; // 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); return true; } /// /// 新建目录 上一级必须先存在 /// /// 服务器下的相对路径 public static void MakeDir(string dirName) { FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpip +path+dirName)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(username, password); reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } /// /// 删除目录 上一级必须先存在 /// /// 服务器下的相对路径 public static void DelDir(string dirName) { FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpip + Path.Combine(path, dirName))); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(username, password); reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } /// /// 从ftp服务器上获得文件夹列表 /// /// 服务器下的相对路径 /// public static List GetDirctory(string RequedstPath) { List strs = new List(); FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpip + Path.Combine(path, RequedstPath))); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(username, password); 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("")) { string msg = line.Substring(line.LastIndexOf("") + 5).Trim(); strs.Add(msg); } line = reader.ReadLine(); } reader.Close(); response.Close(); return strs; } /// /// 从ftp服务器上获得文件列表 /// /// 服务器下的相对路径 /// public static List GetFile(string RequedstPath) { List strs = new List(); FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpip + Path.Combine(path, RequedstPath))); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(username, password); 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("")) { string msg = line.Substring(39).Trim(); strs.Add(msg); } line = reader.ReadLine(); } reader.Close(); response.Close(); return strs; } } }