最近在做文件传输之类的,发现了文件传输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\testDownLoad\", "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;
            }
        }
    }
}

纯属个人笔记,所实现的功能仅满足个人的项目要求,更多的功能大家可以继续学习