UN3L3——FTP关键类

通过C#提供的这3个FTP关键类,我们便可以完成客户端向FTP服务器操作文件的需求,比如上传、下载、删除文件

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
NetworkCredential                            //通信凭证类,用于在FTP文件传输时,设置账号密码
//用于上传、下载、删除服务器上的文件
FtpWebRequest //Ftp文件传输协议客户端操作类
FtpWebRequest.Create() //创建新的WebRequest,用于进行Ftp相关操作
ftpWebRequest.Abort() //如果正在进行文件传输,用此方法可以终止传输
ftpWebRequest.GetRequestStream() //获取用于上传的流
ftpWebRequest.GetResponse() //返回FTP服务器响应类对象
ftpWebRequest.Credentials //设置通信凭证,用于FTP服务器验证
ftpWebRequest.Proxy //代理相关设置
ftpWebRequest.KeepAlive //当完成请求时是否关闭到FTP服务器的控制连接(默认为true,不关闭)
ftpWebRequest.UseBinary //是否使用2进制传输,如果为False就ASCII发送传输,一般用True
ftpWebRequest.RenameTo //对文件重命名
ftpWebRequest.Method //设置操作命令,都是字符串形式的,可以通过WebRequestMethods.Ftp来调用对应的字符串常量
WebRequestMethods.Ftp.DeleteFile //删除文件
WebRequestMethods.Ftp.DownloadFile //下载文件
WebRequestMethods.Ftp.ListDirectory //获取文件简短列表
WebRequestMethods.Ftp.ListDirectoryDetails //获取文件详细列表
WebRequestMethods.Ftp.MakeDirectory //创建目录
WebRequestMethods.Ftp.RemoveDirectory //删除目录
WebRequestMethods.Ftp.UploadFile //上传文件
//用于真正的从服务器获取内容
FtpWebResponse //封装FTP服务器对请求的响应,它提供操作状态以及从服务器下载数据,通过它来真正的从服务器获取内容
ftpWebResponse.Close() //关闭响应对象,释放所有资源
ftpWebResponse.GetResponseStream() //返回从FTP服务器下载数据的流的方法
ftpWebResponse.ContentLength //接受到数据的长度
ftpWebResponse.ContentType //接受数据的类型
ftpWebResponse.StatusCode //FTP服务器下发的最新状态码
ftpWebResponse.StatusDescription //FTP服务器下发的状态代码的文本
ftpWebResponse.BannerMessage //登录前建立连接时FTP服务器发送的消息
ftpWebResponse.ExitMessage //FTP会话结束时服务器发送的消息
ftpWebResponse.LastModified //FTP服务器上的文件的上次修改日期和时间

NetworkCredential

命名空间:System.Net
通信凭证类:NetworkCredential
用于在FTP文件传输时,设置账号密码,在构造函数里调用

1
NetworkCredential n = new NetworkCredential("MrTang", "MrTang123");

FtpWebRequest

命名空间:System.Net
Ftp文件传输协议客户端操作类:FtpWebRequest
主要用于:上传、下载、删除服务器上的文件

  • 重要方法

    1. Create()​:创建新的WebRequest​,用于进行Ftp相关操作

      1
      FtpWebRequest ftpWebRequest = FtpWebRequest.Create(new Uri("ftp://127.0.0.1/Test.txt")) as FtpWebRequest;
    2. Abort()​:如果正在进行文件传输,用此方法可以终止传输

      1
      ftpWebRequest.Abort();
    3. GetRequestStream()​:获取用于上传的流

      如果这里是执行上传任务,则执行该方法后上传逻辑会正式开始执行

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      //创建FTP连接
      FtpWebRequest req = FtpWebRequest.Create(new Uri("ftp://192.168.1.103/pic.png")) as FtpWebRequest;
      //将代理相关信息置空,避免服务器同时有http相关服务,造成冲突
      req.Proxy = null; //将代理相关信息置空
      req.Credentials = new NetworkCredential("MrTang", "MrTang123"); //设置通信凭证
      req.KeepAlive = false; //请求完毕后关闭控制连接
      req.Method = WebRequestMethods.Ftp.UploadFile; //设置操作命令
      req.UseBinary = true; //使用二进制上传
      //等到用于上传的流对象
      Stream upLoadStream = req.GetRequestStream();
      //开始上传
      using (FileStream file = File.OpenRead(Application.streamingAssetsPath + "/test.png"))
      {
      //我们可以一点一点的把这个文件中的字节数组读取出来,然后存入到上传流中
      byte[] bytes = new byte[1024];
      //返回值是真正从文件中读了多少个字节
      int contentLength = file.Read(bytes, 0, bytes.Length);
      //不停的去读取文件中的字节,除非读取完毕,不然一直读,并写入上传流中
      while (contentLength != 0)
      {
      //写入到上传流中
      upLoadStream.Write(bytes, 0, contentLength);
      //写完了继续读
      contentLength = file.Read(bytes, 0, bytes.Length);
      }
      //出循环,证明写完了,就可以关闭流,结束上传
      file.Close();
      upLoadStream.Close();
      print("上传完毕");
      }
    4. GetResponse()​:返回FTP服务器响应

      执行这句代码后,除了上传等任务以外,任务的逻辑会正式执行

      1
      FtpWebResponse ftpWebResponse = ftpWebRequest.GetResponse() as FtpWebResponse;
  • 重要成员

    以下的成员需要在正式开始传输任务前进行创建

    1. Credentials​,通信凭证,设置为NetworkCredential​对象

      对于一些需要输入ID和密码的FTP服务器来说,这一步是必须的

      1
      2
      NetworkCredential networkCredential = new NetworkCredential("MrTang", "MrTang123");
      ftpWebRequest.Credentials = networkCredential;
    2. KeepAlive​​,bool​​值,当完成请求时是否关闭到FTP服务器的控制连接(默认为true​​,不关闭)

      1
      ftpWebRequest.KeepAlive = false;
    3. Proxy​:代理相关设置

      1
      req.Proxy = null;
    4. Method​​,操作命令设置

      该属性很重要,决定了我们执行ftpWebRequest.GetResponse()​或ftpWebRequest.GetRequestStream()​后会具体执行什么逻辑
      操作命令都是字符串形式的,我们可以使用WebRequestMethods.Ftp​中声明的字符串常量来调用获取这些字符串

      1
      ftpWebRequest.Method = WebRequestMethods.Ftp.DeleteFile;
      • WebRequestMethods.Ftp​​类中的操作命令属性

        • DeleteFile​​ 删除文件

          1
          ftpWebRequest.Method = WebRequestMethods.Ftp.DeleteFile;
        • DownloadFile​​ 下载文件

          1
          ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile;
        • ListDirectory​​ 获取文件简短列表

          1
          ftpWebRequest.Method = WebRequestMethods.Ftp.ListDirectory;
        • ListDirectoryDetails​​ 获取文件详细列表

          1
          ftpWebRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
        • MakeDirectory​​ 创建目录

          1
          ftpWebRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
        • RemoveDirectory​​ 删除目录

          1
          ftpWebRequest.Method = WebRequestMethods.Ftp.RemoveDirectory;
        • UploadFile​​ 上传文件

          1
          ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
    5. UseBinary​​ 是否使用2进制传输

      如果为False​​就ASCII发送传输,一般为True​​

      1
      ftpWebRequest.UseBinary = true;
    6. RenameTo​​ 重命名

      对文件重命名

      1
      ftpWebRequest.RenameTo = "myTest.txt";

FtpWebResponse

命名空间:System.Net
它是用于封装FTP服务器对请求的响应,它提供操作状态以及从服务器下载数据
我们可以通过FtpWebRequest​对象中的GetResponse()​方法获取,当使用完毕时,要使用Close​释放
我们通过它来真正的从服务器获取内容

1
FtpWebResponse ftpWebResponse = ftpWebRequest.GetResponse() as FtpWebResponse;
  • 重要方法:

    1. Close()​:释放所有资源

      1
      ftpWebResponse.Close();
    2. GetResponseStream()​:返回从FTP服务器下载数据的流

      执行这句代码后,下载的逻辑会正式执行

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      //和上传不同,上传的文件名是自己定义的,但是下载的文件名一定是资源服务器上有的
      FtpWebRequest request = FtpWebRequest.Create(new Uri("ftp://192.168.1.103/下载测试.png")) as FtpWebRequest;
      //设置代理,凭证,是否保持连接,操作类型,是否使用二进制传输数据
      request.Credentials = new NetworkCredential("MrTang", "MrTang123");
      request.Proxy = null;
      request.KeepAlive = false;
      request.Method = WebRequestMethods.Ftp.DownloadFile;
      request.UseBinary = true;
      FtpWebResponse response = request.GetResponse() as FtpWebResponse;
      //获取下载的流
      Stream downLoadStream = response.GetResponseStream();
      //创建文件流来接收下载流内的数据
      using (FileStream fileStream = File.Create(Application.persistentDataPath + "/DownLoadTest.png"))
      {
      byte[] bytes = new byte[1024];
      //读取下载下来的流数据
      int contentLength = downLoadStream.Read(bytes, 0, bytes.Length);
      //一点一点的下载到本地流
      while (contentLength != 0)
      {
      //把读取出来的字节数组,写入到本地文件流中
      fileStream.Write(bytes, 0, contentLength);
      //如果还有就继续读
      contentLength = downLoadStream.Read(bytes, 0, bytes.Length);
      }
      //下载结束,关闭流
      downLoadStream.Close();
      fileStream.Close();
      }
      print("下载结束!" + Application.persistentDataPath + "/DownLoadTest.png");
  • 重要成员:

    1. ContentLength​:接受到数据的长度

      可以用于获取服务器上某个文件的大小,通过

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      //创建一个Ftp连接
      FtpWebRequest request = FtpWebRequest.Create(new Uri(FTP_PATH + fileName)) as FtpWebRequest;
      //设置代理,凭证,是否保持连接,操作类型,是否使用二进制传输数据
      request.Proxy = null;
      request.Credentials = new NetworkCredential(USER_NAME, PASSWORD);
      request.KeepAlive = false;
      request.Method = WebRequestMethods.Ftp.GetFileSize;
      request.UseBinary = true;
      //获取真正的长度
      FtpWebResponse response = request.GetResponse() as FtpWebResponse;
      response.Close();
      print(response.ContentLength);
    2. ContentType​:接受数据的类型

      1
      print(ftpWebResponse.ContentType);
    3. StatusCode​:FTP服务器下发的最新状态码

      1
      print(ftpWebResponse.StatusCode);
    4. StatusDescription​:FTP服务器下发的状态代码的文本

      1
      print(ftpWebResponse.StatusDescription);
    5. BannerMessage​:登录前建立连接时FTP服务器发送的消息

      1
      print(ftpWebResponse.BannerMessage);
    6. ExitMessage​:FTP会话结束时服务器发送的消息

      1
      print(ftpWebResponse.ExitMessage);
    7. LastModified​:FTP服务器上的文件的上次修改日期和时间

      1
      print(ftpWebResponse.LastModified);