UN3L5——FTP下载文件

使用FTP下载文件关键点

  1. 通信凭证:进行Ftp连接操作时需要的账号密码
  2. 操作命令:WebRequestMethods.Ftp​,设置你想要进行的Ftp操作
  3. 文件流相关 FileStream​ 和 Stream​,上传和下载时都会使用的文件流,下载文件流使用FtpWebResponse​类获取
  4. 保证FTP服务器已经开启,并且能够正常访问

FTP下载

C#已经把Ftp相关操作封装的很好了,我们只需要熟悉API,直接使用他们进行FTP下载即可
我们主要做的操作是:把下载文件的FTP流读出字节数据写入到本地文件流中

下载前,通过FtpWebRequest.Create()传入的参数决定要下载什么文件,下载的文件名一定要是资源服务器上有的
然后对必要的属性进行设置,例如凭证,是否保持连接,操作类型,是否使用二进制传输数据等
然后使用ftpWebRequest.GetResponse()​来获取下载相关的响应FtpWebResponse​,
再通过ftpWebResponse.GetResponseStream()​获取下载数据所用的流
再创建文件流,文件的路径决定了下载位置和下载得到的文件名,
然后通过字节数组一点一点从下载流获取数据,再写入到文件流内,
循环执行以上步骤,直到下载流获取不到新数据,下载就结束了。

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
32
33
34
35
36
37
38
39
40
41
void Start()
{
try
{
//和上传不同,上传的文件名是自己定义的,但是下载的文件名一定是资源服务器上有的
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();
}
response.Close();
print("下载结束!" + Application.persistentDataPath + "/DownLoadTest.png");
}
catch (Exception e)
{
print("下载出错!" + e.Message);
}
}