我分別遇過需上傳到一般FTP、SFTP和使用主動模式FTP的情況,因此實做過三種方式:FTP的兩種,SFTP和使用主動模式FTP的一種。
這邊只記錄FTP的兩種,第三種有點麻煩,之後有空整理再另外放上來。
使用WebClient的第一種:
- using System.Collections;
- using System.Collections.Generic;
- using System.Net;
- using System.Threading;
- using UnityEngine;
- public class XXX : MonoBehaviour
- {
- void Start()
- {
- StartCoroutine(FTPUpload1());
- }
- void Update()
- {
- }
- IEnumerator FTPUpload1()
- {
- var filename = "D:/XXX.png";
- bool isUploading = false;
- UnityEngine.Debug.Log("開始!!");
- ThreadPool.QueueUserWorkItem((o) =>
- {
- using (WebClient client = new WebClient())
- {
- client.Credentials = new NetworkCredential("kim", "123");
- client.UploadFile("ftp://127.0.0.1/XXX.png", "STOR", filename);
- }
- isUploading = true;
- });
- while (!isUploading)
- {
- UnityEngine.Debug.Log("上傳中!!");
- yield return new WaitForSeconds(0.1f);
- }
- UnityEngine.Debug.Log("結束!!");
- }
- }
使用ftpWebRequest的第二種:
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.Net;
- using System.Threading;
- using UnityEngine;
- public class XXX : MonoBehaviour
- {
- void Start()
- {
- StartCoroutine(FTPUpload2());
- }
- void Update()
- {
- }
- IEnumerator FTPUpload2()
- {
- var filename = "D:/XXX.png";
- bool isUploading = false;
- UnityEngine.Debug.Log("開始!!");
- ThreadPool.QueueUserWorkItem((o) =>
- {
- FtpWebRequest ftpWebRequest = (FtpWebRequest)WebRequest.Create("ftp://127.0.0.1/XXX.png");
- ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
- ftpWebRequest.Credentials = new NetworkCredential("kim", "123");
- ftpWebRequest.UsePassive = true;
- ftpWebRequest.UseBinary = true;
- ftpWebRequest.KeepAlive = true;
- StreamReader sourceStream = new StreamReader(filename);
- byte[] fileBytes = File.ReadAllBytes(filename);
- sourceStream.Close();
- ftpWebRequest.ContentLength = fileBytes.Length;
- Stream requestStream = ftpWebRequest.GetRequestStream();
- requestStream.Write(fileBytes, 0, fileBytes.Length);
- requestStream.Close();
- FtpWebResponse ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
- ftpWebResponse.Close();
- isUploading = true;
- });
- while (!isUploading)
- {
- UnityEngine.Debug.Log("上傳中!!");
- yield return new WaitForSeconds(0.1f);
- }
- UnityEngine.Debug.Log("結束!!");
- }
- }