首頁 > web前端 > html教學 > FTP的檔案管理

FTP的檔案管理

php中世界最好的语言
發布: 2018-03-16 14:22:41
原創
6215 人瀏覽過

這次帶給大家FTP的檔案管理,對FTP檔案進行管理的注意事項有哪些,以下就是實戰案例,一起來看一下。

因為網站有下載文件需要和網站分離,使用到了FTP管理文件,這裡做一個簡單的整理。

1.安裝FTP

 和安裝iis一樣。全部勾選。

 設定網站名稱和路徑。

 

 設定ip。

 

 身分授權選擇所有用戶,可讀寫。

  

 完成之後IIS就會出現:

2.新增FTP使用者

電腦- ->管理-->本地用戶和群組。 新增使用者,描述為FTP。

這裡要設定使用者的密碼方式,去掉「使用者下次登入時必須更改密碼」的選項。

 

 不然會登入不成功。報530錯誤。

3.測試登入

ftp ip 就可以存取。顯示230 user logged in 表示登入成功。

4.上傳下載

 FtpHelper:

 public static class FtpHelper
    {        //基本设置
        private const string Path = @"ftp://192.168.253.4:21/"; //目标路径
        private const string Ftpip = "192.168.253.4"; // GetAppConfig("obj");    //ftp IP地址
        private const string Username = "stone"; //GetAppConfig("username");   //ftp用户名
        private const string Password = "111111"; //GetAppConfig("password");   //ftp密码       // 2M 可能不够
        private const int bufferSize = 2048;        /// <summary>
        /// 获取自定义配置的值        /// </summary>
        /// <param name="strKey">键值</param>
        /// <returns>键值对应的值</returns>
        public static string GetAppConfig(string strKey)
        {            foreach (string key in ConfigurationManager.AppSettings)
            {                if (key == strKey)
                {                    return ConfigurationManager.AppSettings[strKey];
                }
            }            return null;
        }        //获取ftp上面的文件和文件夹
        public static string[] GetFileList(string dir)
        {            var result = new StringBuilder();            try
            {                var ftpRequest = FtpRequest(Path, WebRequestMethods.Ftp.ListDirectory);
                WebResponse response = ftpRequest.GetResponse();                var reader = new StreamReader(response.GetResponseStream());                string line = reader.ReadLine();                while (line != null)
                {
                    result.Append(line);
                    result.Append("\n");
                    Console.WriteLine(line);
                    line = reader.ReadLine();
                }                // to remove the trailing '\n'
                result.Remove(result.ToString().LastIndexOf('\n'), 1);
                reader.Close();
                response.Close();                return result.ToString().Split('\n');
            }            catch (Exception ex)
            {
                Console.WriteLine("获取ftp上面的文件和文件夹:" + ex.Message);                return new[] {""};
            }
        }        /// <summary>
        ///     获取文件大小        /// </summary>
        /// <param name="file">ip服务器下的相对路径</param>
        /// <returns>文件大小</returns>
        public static int GetFileSize(string file)
        {            var result = new StringBuilder();
            FtpWebRequest request;            try
            {
                request = (FtpWebRequest) WebRequest.Create(new Uri(Path + file));
                request.UseBinary = true;
                request.Credentials = new NetworkCredential(Username, Password); //设置用户名和密码
                request.Method = WebRequestMethods.Ftp.GetFileSize;                var dataLength = (int) request.GetResponse().ContentLength;                return dataLength;
            }            catch (Exception ex)
            {
                Console.WriteLine("获取文件大小出错:" + ex.Message);                return -1;
            }
        }        /// <summary>
        ///     文件上传        /// </summary>
        /// <param name="localFile">原路径(绝对路径)包括文件名</param>
        /// <param name="remoteFile">目标文件夹:服务器下的相对路径 不填为根目录</param>
        public static bool UpLoad(string localFile, string remoteFile = "")
        {            try
            {                string url = Path;                if (remoteFile != "")
                    url += remoteFile + "/";                try
                {                    //待上传的文件 (全路径)
                    try
                    {                        var fileInfo = new FileInfo(localFile);                        using (FileStream fs = fileInfo.OpenRead())
                        {                            long length = fs.Length;
                            FtpWebRequest reqFtp = FtpRequest(url + fileInfo.Name,WebRequestMethods.Ftp.UploadFile);                            using (Stream stream = reqFtp.GetRequestStream())
                            {                                //设置缓冲大小
                                int BufferLength = 5120;                                var b = new byte[BufferLength];                                int i;                                while ((i = fs.Read(b, 0, BufferLength)) > 0)
                                {
                                    stream.Write(b, 0, i);
                                }
                                Console.WriteLine("上传文件成功");                                return true;
                            }
                        }
                    }                    catch (Exception ex)
                    {
                        Console.WriteLine("上传文件失败错误为" + ex.Message);
                    }                    finally
                    {
                    }
                }                catch (Exception ex)
                {
                    Console.WriteLine("上传文件失败错误为" + ex.Message);
                }                finally
                {
                }
            }            catch (Exception ex)
            {
                Console.WriteLine("上传文件失败错误为" + ex.Message);
            }            return false;
        }        public static bool UpLoad(Stream localFileStream, string remoteFile)
        {            bool result = true;            try
            {                var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.UploadFile);                var ftpStream = ftpRequest.GetRequestStream();                var byteBuffer = new byte[bufferSize];                int bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);                try
                {                    while (bytesSent != 0)
                    {
                        ftpStream.Write(byteBuffer, 0, bytesSent);
                        bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
                    }
                }                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    result = false;
                }
                localFileStream.Close();
                ftpStream.Close();
            }            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                result = false;
            }            return result;
        }        public static FtpWebRequest FtpRequest(string requstUrl,string method,bool closedResponse=false)
        {            var reqFtp = (FtpWebRequest) WebRequest.Create(new Uri(requstUrl));            //设置连接到FTP的帐号密码
            reqFtp.Credentials = new NetworkCredential(Username, Password);            //设置请求完成后是否保持连接
            reqFtp.KeepAlive = false;            //指定执行命令
            reqFtp.Method = method;            //指定数据传输类型
            reqFtp.UseBinary = true;            if (closedResponse)
            {                var resp=reqFtp.GetResponse();
                resp.Close();
            }            return reqFtp;
        }        /// <summary>
        /// 下载        /// </summary>
        /// <param name="localFile">目的位置</param>
        /// <param name="remoteFile">服务器相对位置</param>
        /// <returns></returns>
        public static bool Download(string localFile,string remoteFile)
        {            bool check = true;            try
            {                var outputStream = new FileStream(localFile, FileMode.Create);                var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.DownloadFile);                var response = (FtpWebResponse)ftpRequest.GetResponse();
                Stream ftpStream = response.GetResponseStream();                long cl = response.ContentLength;                int bufferSize = 2048;                int readCount;                var 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)
            {
                check = false;
            }            return check;
        }        public static Stream Download(string remoteFile)
        {            var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.DownloadFile);            var response = (FtpWebResponse)ftpRequest.GetResponse();
            Stream ftpStream = response.GetResponseStream();            return ftpStream;
        }        /// <summary>
        ///     删除文件        /// </summary>
        /// <param name="fileName">服务器下的相对路径 包括文件名</param>
        public static void DeleteFileName(string fileName)
        {            try
            {
               FtpRequest(Path + fileName, WebRequestMethods.Ftp.DeleteFile,true);
            }            catch (Exception ex)
            {
                Console.WriteLine("删除文件出错:" + ex.Message);
            }
        }        /// <summary>
        /// 新建目录 上一级必须先存在        /// </summary>
        /// <param name="dirName">服务器下的相对路径</param>
        public static void MakeDir(string dirName)
        {            try
            {
                FtpRequest(Path + dirName, WebRequestMethods.Ftp.MakeDirectory, true);
            }            catch (Exception ex)
            {
                Console.WriteLine("创建目录出错:" + ex.Message);
            }
        }        /// <summary>
        /// 删除目录 上一级必须先存在        /// </summary>
        /// <param name="dirName">服务器下的相对路径</param>
        public static void DelDir(string dirName)
        {            try
            {
               FtpRequest(Path + dirName, WebRequestMethods.Ftp.RemoveDirectory,true);
            }            catch (Exception ex)
            {
                Console.WriteLine("删除目录出错:" + ex.Message);
            }
        }        /// <summary>
        ///     从ftp服务器上获得文件夹列表        /// </summary>
        /// <param name="requedstPath">服务器下的相对路径</param>
        /// <returns></returns>
        public static List<string> GetDirctory(string requedstPath)
        {            var strs = new List<string>();            try
            {                var reqFtp = FtpRequest(Path + requedstPath, WebRequestMethods.Ftp.ListDirectoryDetails);
                WebResponse response = reqFtp.GetResponse();                var reader = new StreamReader(response.GetResponseStream()); //中文文件名
                string line = reader.ReadLine();                while (line != null)
                {                    if (line.Contains("<DIR>"))
                    {                        string msg = line.Substring(line.LastIndexOf("<DIR>") + 5).Trim();
                        strs.Add(msg);
                    }
                    line = reader.ReadLine();
                }
                reader.Close();
                response.Close();                return strs;
            }            catch (Exception ex)
            {
                Console.WriteLine("获取目录出错:" + ex.Message);
            }            return strs;
        }        /// <summary>
        ///     从ftp服务器上获得文件列表        /// </summary>
        /// <param name="requedstPath">服务器下的相对路径</param>
        /// <returns></returns>
        public static List<string> GetFile(string requedstPath)
        {            var strs = new List<string>();            try
            {                var reqFtp = FtpRequest(Path + requedstPath, WebRequestMethods.Ftp.ListDirectoryDetails);
                WebResponse response = reqFtp.GetResponse();                var reader = new StreamReader(response.GetResponseStream()); //中文文件名
                string line = reader.ReadLine();                while (line != null)
                {                    if (!line.Contains("<DIR>"))
                    {                        string msg = line.Substring(39).Trim();
                        strs.Add(msg);
                    }
                    line = reader.ReadLine();
                }
                reader.Close();
                response.Close();                return strs;
            }            catch (Exception ex)
            {
                Console.WriteLine("获取文件出错:" + ex.Message);
            }            return strs;
        }
    }
登入後複製

View Code

主要是透過建立FtpRequest來處理Ftp相關請求。

  public static FtpWebRequest FtpRequest(string requstUrl,string method,bool closedResponse=false)
        {            var reqFtp = (FtpWebRequest) WebRequest.Create(new Uri(requstUrl));            //设置连接到FTP的帐号密码
            reqFtp.Credentials = new NetworkCredential(Username, Password);            //设置请求完成后是否保持连接
            reqFtp.KeepAlive = false;            //指定执行命令
            reqFtp.Method = method;            //指定数据传输类型
            reqFtp.UseBinary = true;            if (closedResponse)
            {                var resp=reqFtp.GetResponse();
                resp.Close();
            }            return reqFtp;
        }
登入後複製

因為在MVC網站中使用的檔案流的方式。

下載:

   public static Stream Download(string remoteFile)
        {            var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.DownloadFile);            var response = (FtpWebResponse)ftpRequest.GetResponse();
            Stream ftpStream = response.GetResponseStream();            return ftpStream;
        }
登入後複製

呼叫:

 public ActionResult DownloadFileFromFtp()
        {             var filepath = "DIAView//simple.png";              var stream = FtpHelper.Download(filepath);            return File(stream, FileHelper.GetContentType(".png"),"test.png");
        }
登入後複製

上傳:

  public static bool UpLoad(Stream localFileStream, string remoteFile)
        {            bool result = true;            try
            {                var ftpRequest = FtpRequest(Path + remoteFile, WebRequestMethods.Ftp.UploadFile);                var ftpStream = ftpRequest.GetRequestStream();                var byteBuffer = new byte[bufferSize];                int bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);                try
                {                    while (bytesSent != 0)
                    {
                        ftpStream.Write(byteBuffer, 0, bytesSent);
                        bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
                    }
                }                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    result = false;
                }
                localFileStream.Close();
                ftpStream.Close();
            }            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                result = false;
            }            return result;
        }
登入後複製

呼叫:

      [HttpPost]        public JsonResult UploadFile(HttpPostedFileBase fileData)
        {           if (fileData != null)
            {               string fileName = Path.GetFileName(fileData.FileName);// 原始文件名称
                string saveName = Encrypt.GenerateOrderNumber() +"_"+fileName;  
                FtpHelper.UpLoad(fileData.InputStream, "DIAView" + "/" + saveName);                return Json(new { Success = true, FileName = fileName, SaveName = saveName}, JsonRequestBehavior.AllowGet);
            }            return Json(new { Success = false, Message = "请选择要上传的文件!" }, JsonRequestBehavior.AllowGet);
        }
登入後複製

Ftp也可以設定不同使用者有不同的目錄,是以為記

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

怎麼用nodejs搭建伺服器

#怎麼將Node.JS部署到Heroku

以上是FTP的檔案管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板