FTP的文件管理

互联网 18-3-16
这次给大家带来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的文件管理的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 文件
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:了解一下HTML5中新增加的标签

相关资讯