最近在做文件传输之类的,发现了文件传输FTP,感觉还挺好用的,让文件的传输变得比较简单
直接上示例
using System; using System.Collections; using System.Collections.Generic; using System.Net.NetworkInformation; using UnityEngine; using UnityEngine.UI; public class newID_Cy : MonoBehaviour { public static newID_Cy ID_instance = null; public static string ftpclientaddress= "127.0.0.1:21"; public static string ftpclientname = "username"; public static string ftpclientmima = "password"; public static string mac = ""; // Use this for initialization public Text text2; void Awake() { ID_instance = this; NetworkInterface[] nis = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface ni in nis) { string temp = ni.GetPhysicalAddress().ToString(); temp = temp.Trim(); if (temp != null && temp.Length > 0) mac += temp; } print("-------------------------------------------------------1:" + mac); print("-----2:" + newID_Cy.mac); } //取CPU编号 //public String GetCpuID() //{ // try // { // ManagementClass mc = new ManagementClass("Win32_Processor"); // ManagementObjectCollection moc = mc.GetInstances(); // String strCpuID = null; // foreach (ManagementObject mo in moc) // { // strCpuID = mo.Properties["ProcessorId"].Value.ToString(); // break; // } // return strCpuID; // } // catch // { // return ""; // } //}//end method }
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Linq; //using System.Data; using System.IO; using System.ComponentModel; using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Security.Cryptography; using UnityEngine.SceneManagement; namespace Common { //fileUpload public class UpLoadVideo : MonoBehaviour { void Awake() { // Debug.Log(Application.persistentDataPath); } UpLoadVideo.FTPClient clientn = new UpLoadVideo.FTPClient(newID_Cy.ftpclientaddress, newID_Cy.ftpclientname, newID_Cy.ftpclientmima); public static string GetPersistentFilePath(string filename) { string filepath; if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) { filepath = Application.persistentDataPath + "/" + filename; } else if (Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.Android) { filepath = Application.persistentDataPath + "/" + filename; } else { filepath = Application.persistentDataPath + "/" + filename; } return filepath; } public static string GetPersistentFilePath() { string filepath; //http://www.cnblogs.com/vsirWaiter/p/5340284.html if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) filepath = "file://" + Application.persistentDataPath + "/" + "Video" + "/"; else if (Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.Android) filepath = Application.persistentDataPath + "/" + "Video" + "/"; else { filepath = Application.persistentDataPath + "/" + "Video" + "/"; } return filepath; } //上传视频到指定文件夹 public void Upload() { FTPClient client = new FTPClient(newID_Cy.ftpclientaddress, newID_Cy.ftpclientname, newID_Cy.ftpclientmima); System.Net.ServicePointManager.DefaultConnectionLimit = 1000; FileInfo f = new FileInfo(GetPersistentFilePath("testvideo.mp4")); client.fileUpload(f, "Video/", "testvideo.mp4"); if (!client.fileCheckExist("Video/", "testvideo.mp4")) { Debug.Log("失败"); } else { Debug.Log("成功"); } } //下载视频到本地 public void DownLoadVideo() { FTPClient client = new FTPClient(newID_Cy.ftpclientaddress, newID_Cy.ftpclientname, newID_Cy.ftpclientmima); client.fileDownload(@"H:FTPRoot estDownLoad", "downloadvideo.mp4", "Video/testDownLoad/", "testvideo.mp4"); } public class FTPClient // : MonoBehaviour { public Text MessageBox2; private string ftpServerIP = String.Empty; private string ftpUser = String.Empty; private string ftpPassword = String.Empty; private string ftpRootURL = String.Empty; public FTPClient(string url, string userid, string password) { this.ftpServerIP = url; this.ftpUser = userid; this.ftpPassword = password; this.ftpRootURL = "ftp://" + url + "/"; } /// <summary> /// 上传 /// </summary> /// <param name="localFile">本地文件绝对路径</param> /// <param name="ftpPath">上传到ftp的路径</param> /// <param name="ftpFileName">上传到ftp的文件名</param> public bool fileUpload(FileInfo localFile, string ftpPath, string ftpFileName) { bool success = false; FtpWebRequest ftpWebRequest = null; FileStream localFileStream = null; Stream requestStream = null; System.GC.Collect(); string uri = ftpRootURL + ftpPath + ftpFileName; ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); System.Net.ServicePointManager.DefaultConnectionLimit = 1000; ftpWebRequest.UseBinary = true; ftpWebRequest.KeepAlive = false; ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile; ftpWebRequest.ContentLength = localFile.Length; ftpWebRequest.UsePassive = true; ftpWebRequest.Timeout = 100000; int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen = 0; localFileStream = localFile.OpenRead(); try { requestStream = ftpWebRequest.GetRequestStream(); contentLen = localFileStream.Read(buff, 0, buffLength); while (contentLen != 0) { requestStream.Write(buff, 0, contentLen); contentLen = localFileStream.Read(buff, 0, buffLength); // contentLen--; } requestStream.Close(); localFileStream.Close(); } catch (Exception ty) { // ab.text = ty.ToString(); print(ty); } success = true; if (requestStream != null) { } if (localFileStream != null) { } //} if (ftpWebRequest != null) { } return success; } /// <summary> /// 上传文件 /// </summary> /// <param name="localPath">本地文件地址(没有文件名)</param> /// <param name="localFileName">本地文件名</param> /// <param name="ftpPath">上传到ftp的路径</param> /// <param name="ftpFileName">上传到ftp的文件名</param> public bool fileUpload(string localPath, string localFileName, string ftpPath, string ftpFileName) { bool success = false; try { FileInfo localFile = new FileInfo(localPath + localFileName); if (localFile.Exists) { success = fileUpload(localFile, ftpPath, ftpFileName); } else { success = false; } } catch (Exception) { success = false; } return success; } /// <summary> /// 下载文件 /// </summary> /// <param name="localPath">本地文件地址(没有文件名)</param> /// <param name="localFileName">本地文件名</param> /// <param name="ftpPath">下载的ftp的路径</param> /// <param name="ftpFileName">下载的ftp的文件名</param> public bool fileDownload(string localPath, string localFileName, string ftpPath, string ftpFileName) { bool success = false; FtpWebRequest ftpWebRequest = null; FtpWebResponse ftpWebResponse = null; Stream ftpResponseStream = null; FileStream outputStream = null; try { outputStream = new FileStream(localPath + localFileName, FileMode.Create); string uri = ftpRootURL + ftpPath + ftpFileName; ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); ftpWebRequest.UseBinary = true; ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile; ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse(); ftpResponseStream = ftpWebResponse.GetResponseStream(); // a.text = ftpResponseStream.Length.ToString(); long contentLength = ftpWebResponse.ContentLength; int bufferSize = 2048; byte[] buffer = new byte[bufferSize]; int readCount; readCount = ftpResponseStream.Read(buffer, 0, bufferSize); while (readCount > 0) { outputStream.Write(buffer, 0, readCount); readCount = ftpResponseStream.Read(buffer, 0, bufferSize); } success = true; } catch (Exception) { success = false; } finally { if (outputStream != null) { outputStream.Close(); } if (ftpResponseStream != null) { ftpResponseStream.Close(); } if (ftpWebResponse != null) { ftpWebResponse.Close(); } } return success; } /// <summary> /// 重命名 /// </summary> /// <param name="ftpPath">ftp文件路径</param> /// <param name="currentFilename"></param> /// <param name="newFilename"></param> public bool fileRename(string ftpPath, string currentFileName, string newFileName) { bool success = false; FtpWebRequest ftpWebRequest = null; FtpWebResponse ftpWebResponse = null; Stream ftpResponseStream = null; try { string uri = ftpRootURL + ftpPath + currentFileName; ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); ftpWebRequest.UseBinary = true; ftpWebRequest.Method = WebRequestMethods.Ftp.Rename; ftpWebRequest.RenameTo = newFileName; ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse(); ftpResponseStream = ftpWebResponse.GetResponseStream(); } catch (Exception) { success = false; } finally { if (ftpResponseStream != null) { ftpResponseStream.Close(); } if (ftpWebResponse != null) { ftpWebResponse.Close(); } } return success; } /// <summary> /// 消除文件 /// </summary> /// <param name="filePath"></param> public bool fileDelete(string ftpPath, string ftpName) { bool success = false; FtpWebRequest ftpWebRequest = null; FtpWebResponse ftpWebResponse = null; Stream ftpResponseStream = null; StreamReader streamReader = null; try { string uri = ftpRootURL + ftpPath + ftpName; ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); ftpWebRequest.KeepAlive = false; ftpWebRequest.Method = WebRequestMethods.Ftp.DeleteFile; ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse(); long size = ftpWebResponse.ContentLength; ftpResponseStream = ftpWebResponse.GetResponseStream(); streamReader = new StreamReader(ftpResponseStream); string result = String.Empty; result = streamReader.ReadToEnd(); success = true; } catch (Exception) { success = false; } finally { if (streamReader != null) { streamReader.Close(); } if (ftpResponseStream != null) { ftpResponseStream.Close(); } if (ftpWebResponse != null) { ftpWebResponse.Close(); } } return success; } /// <summary> /// 文件存在检查 /// </summary> /// <param name="ftpPath"></param> /// <param name="ftpName"></param> /// <returns></returns> public bool fileCheckExist(string ftpPath, string ftpName) { bool success = false; FtpWebRequest ftpWebRequest = null; WebResponse webResponse = null; StreamReader reader = null; try { string url = ftpRootURL + ftpPath; ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(url)); ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword); ftpWebRequest.Method = WebRequestMethods.Ftp.ListDirectory; ftpWebRequest.KeepAlive = false; webResponse = ftpWebRequest.GetResponse(); reader = new StreamReader(webResponse.GetResponseStream()); string line = reader.ReadLine(); while (line != null) { if (line == ftpName) { success = true; break; } line = reader.ReadLine(); } } catch (Exception) { success = false; } finally { if (reader != null) { reader.Close(); } if (webResponse != null) { webResponse.Close(); } } return success; } } } }
纯属个人笔记,所实现的功能仅满足个人的项目要求,更多的功能大家可以继续学习