UN3L4——FTP上传文件
使用FTP上传文件关键点
- 通信凭证:进行Ftp连接操作时需要的账号密码
- 操作命令:
WebRequestMethods.Ftp
,设置你想要进行的Ftp操作
- 文件流相关
FileStream
和 Stream
,上传和下载时都会使用的文件流
- 保证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 { FtpWebRequest req = FtpWebRequest.Create(new Uri("ftp://192.168.1.103/pic.png")) as FtpWebRequest; 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相关类似