UN3L3——FTP关键类
UN3L3——FTP关键类
通过C#提供的这3个FTP关键类,我们便可以完成客户端向FTP服务器操作文件的需求,比如上传、下载、删除文件
本章代码关键字
1 | NetworkCredential //通信凭证类,用于在FTP文件传输时,设置账号密码 |
NetworkCredential
命名空间:System.Net
通信凭证类:NetworkCredential
用于在FTP文件传输时,设置账号密码,在构造函数里调用
1 | NetworkCredential n = new NetworkCredential("MrTang", "MrTang123"); |
FtpWebRequest
命名空间:System.Net
Ftp文件传输协议客户端操作类:FtpWebRequest
主要用于:上传、下载、删除服务器上的文件
-
重要方法
-
Create()
:创建新的WebRequest
,用于进行Ftp相关操作1
FtpWebRequest ftpWebRequest = FtpWebRequest.Create(new Uri("ftp://127.0.0.1/Test.txt")) as FtpWebRequest;
-
Abort()
:如果正在进行文件传输,用此方法可以终止传输1
ftpWebRequest.Abort();
-
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("上传完毕");
} -
GetResponse()
:返回FTP服务器响应执行这句代码后,除了上传等任务以外,任务的逻辑会正式执行
1
FtpWebResponse ftpWebResponse = ftpWebRequest.GetResponse() as FtpWebResponse;
-
-
重要成员
以下的成员需要在正式开始传输任务前进行创建
-
Credentials
,通信凭证,设置为NetworkCredential
对象对于一些需要输入ID和密码的FTP服务器来说,这一步是必须的
1
2NetworkCredential networkCredential = new NetworkCredential("MrTang", "MrTang123");
ftpWebRequest.Credentials = networkCredential; -
KeepAlive
,bool
值,当完成请求时是否关闭到FTP服务器的控制连接(默认为true
,不关闭)1
ftpWebRequest.KeepAlive = false;
-
Proxy
:代理相关设置1
req.Proxy = null;
-
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;
-
-
-
UseBinary
是否使用2进制传输如果为
False
就ASCII发送传输,一般为True
1
ftpWebRequest.UseBinary = true;
-
RenameTo
重命名对文件重命名
1
ftpWebRequest.RenameTo = "myTest.txt";
-
FtpWebResponse
命名空间:System.Net
它是用于封装FTP服务器对请求的响应,它提供操作状态以及从服务器下载数据
我们可以通过FtpWebRequest
对象中的GetResponse()
方法获取,当使用完毕时,要使用Close
释放
我们通过它来真正的从服务器获取内容
1 | FtpWebResponse ftpWebResponse = ftpWebRequest.GetResponse() as FtpWebResponse; |
-
重要方法:
-
Close()
:释放所有资源1
ftpWebResponse.Close();
-
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");
-
-
重要成员:
-
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); -
ContentType
:接受数据的类型1
print(ftpWebResponse.ContentType);
-
StatusCode
:FTP服务器下发的最新状态码1
print(ftpWebResponse.StatusCode);
-
StatusDescription
:FTP服务器下发的状态代码的文本1
print(ftpWebResponse.StatusDescription);
-
BannerMessage
:登录前建立连接时FTP服务器发送的消息1
print(ftpWebResponse.BannerMessage);
-
ExitMessage
:FTP会话结束时服务器发送的消息1
print(ftpWebResponse.ExitMessage);
-
LastModified
:FTP服务器上的文件的上次修改日期和时间1
print(ftpWebResponse.LastModified);
-