UN3L4——FTP上传文件

使用FTP上传文件关键点

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

FTP上传

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

上传前,通过FtpWebRequest.Create()传入的参数决定上传文件到什么位置,文件名是什么
然后对必要的属性进行设置,例如凭证,是否保持连接,操作类型,是否使用二进制传输数据等
然后使用req.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
31
32
33
34
35
36
37
38
39
40
void Start()
{
try
{
//创建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("上传完毕");
}
}
catch (Exception e)
{
print("上传出错,失败!" + e.Message);
}
}

FTP上传相关API也有异步方法,使用上和以前的TCP相关类似