Unity C# 网络学习(六)——FTP(一)
一.FTP关键类
1.NetworkCredential类
NetworkCredential networkCredential = new NetworkCredential("zzs", "zzzsss123");
2.FtpWebRequest类
FtpWebRequest ftpWebReq = (FtpWebRequest) WebRequest.Create(new Uri("ftp://127.0.0.1/1.jpg"));
ftpWebReq.Abort();
Stream s = ftpWebReq.GetRequestStream();
FtpWebResponse ftpWebRep = ftpWebReq.GetResponse() as FtpWebResponse;
ftpWebReq.Credentials = networkCredential;
ftpWebReq.KeepAlive = false;
ftpWebReq.Method = WebRequestMethods.Ftp.DownloadFile;
ftpWebReq.UseBinary = true;
ftpWebReq.RenameTo = "111.jpg";
3.FtpWebResponse类
FtpWebResponse response = ftpWebReq.GetResponse() as FtpWebResponse;
if (response == null)
return;
response.Close();
Stream sm = response.GetResponseStream();
Debug.Log(response.ContentLength);
Debug.Log(response.ContentType);
Debug.Log(response.StatusCode);
Debug.Log(response.StatusDescription);
Debug.Log(response.BannerMessage);
Debug.Log(response.ExitMessage);
Debug.Log(response.LastModified);
二.FTP上传
public class Lesson12 : MonoBehaviour
{
private void Start()
{
try
{
NetworkCredential networkCredential = new NetworkCredential("zzs", "zzzsss123");
FtpWebRequest ftpWebRequest = WebRequest.Create(new Uri("ftp://127.0.0.1/pic.jpg")) as FtpWebRequest;
if (ftpWebRequest == null)
return;
ftpWebRequest.Proxy = null;
ftpWebRequest.Credentials = networkCredential;
ftpWebRequest.KeepAlive = false;
ftpWebRequest.UseBinary = true;
ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
Stream upLoadStream = ftpWebRequest.GetRequestStream();
string path = Application.streamingAssetsPath + "/test.jpg";
using (FileStream fs = new FileStream(path, FileMode.Open))
{
byte[] buffer = new byte[1024];
int readLength = fs.Read(buffer, 0, buffer.Length);
while (readLength > 0)
{
upLoadStream.Write(buffer,0,readLength);
readLength = fs.Read(buffer, 0, buffer.Length);
}
fs.Close();
}
upLoadStream.Close();
Debug.Log("完成!");
}
catch (Exception e)
{
Debug.Log(e);
return;
}
}
}
三.FTP上传封装
1.协程实现
private IEnumerator UpLoadFile(string fileName, string path, Action action = null)
{
NetworkCredential networkCredential = new NetworkCredential(UserName, Password);
FtpWebRequest ftpWebRequest = WebRequest.Create(new Uri(FtpURL) + fileName) as FtpWebRequest;
if (ftpWebRequest == null)
yield break;
ftpWebRequest.Credentials = networkCredential;
ftpWebRequest.Proxy = null;
ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
ftpWebRequest.KeepAlive = false;
ftpWebRequest.UseBinary = true;
Stream ftpRequestStream = ftpWebRequest.GetRequestStream();
using (FileStream fs = new FileStream(path,FileMode.Open,FileAccess.Read,FileShare.Read))
{
byte[] buffer = new byte[10240];
int length = fs.Read(buffer,0,buffer.Length);
while (length>0)
{
ftpRequestStream.Write(buffer,0,length);
length = fs.Read(buffer,0,buffer.Length);
yield return null;
}
}
ftpRequestStream.Close();
action?.Invoke();
}
2.Task多线程实现
public async void UpLoadFileAsync(string fileName, string path, Action action = null)
{
await Task.Run(() =>
{
NetworkCredential networkCredential = new NetworkCredential(UserName, Password);
FtpWebRequest ftpWebRequest = WebRequest.Create(new Uri(FtpURL) + fileName) as FtpWebRequest;
if (ftpWebRequest == null)
return;
ftpWebRequest.Credentials = networkCredential;
ftpWebRequest.Proxy = null;
ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
ftpWebRequest.KeepAlive = false;
ftpWebRequest.UseBinary = true;
Stream ftpRequestStream = ftpWebRequest.GetRequestStream();
using (FileStream fs = new FileStream(path,FileMode.Open,FileAccess.Read,FileShare.Read))
{
byte[] buffer = new byte[10240];
int length = fs.Read(buffer,0,buffer.Length);
while (length>0)
{
ftpRequestStream.Write(buffer,0,length);
length = fs.Read(buffer,0,buffer.Length);
}
}
ftpRequestStream.Close();
action?.Invoke();
});
}