// 一般使用 WWW 能處理就用 WWW 來處理
// 如果 WWW 不符合你需求可以選擇 WebClient 來處理
// 如果連 WebClient 都不能符合你需求,再來看這邊文章吧...
// 因為這篇文章已經寫到 HTTP 底層了,所以程式碼會較多
// 但 可以控制的範圍非常廣,基本上都能符合您的需求
// 祝您使用愉快 ~


using UnityEngine;
using System.Collections;
using System.Net;
using System.IO;
 
public class Upload : MonoBehaviour
{
 
    string serverURL = "http://127.0.0.1:8080/UploadFile"; // 伺服器上傳 URL
 
    void Start () {
            HttpWebRequest requestToServerEndpoint =
            (HttpWebRequest)WebRequest.Create (serverURL);
                                 
            string boundaryString = "----SomeRandomText";
            string fileUrl = @"C:\A.jpg"; // 實際檔案位置
                                 
            // 設定 HTTP 標頭( Header )
            requestToServerEndpoint.Method = WebRequestMethods.Http.Post;
            requestToServerEndpoint.ContentType = "multipart/form-data; boundary=" + boundaryString;
            requestToServerEndpoint.KeepAlive = true;
            requestToServerEndpoint.Credentials = System.Net.CredentialCache.DefaultCredentials;
                                 
            //  使用 MemoryStream 操控 Post Request 資料,以取得長度資料            
            MemoryStream postDataStream = new MemoryStream ();
            StreamWriter postDataWriter = new StreamWriter (postDataStream);
            
            postDataWriter.Write ("\r\n--" + boundaryString + "\r\n");
            postDataWriter.Write ("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}",
            "myFileDescription",
            "A sample file description");
                                 
            // 在 Post 中插入檔案
            postDataWriter.Write ("\r\n--" + boundaryString + "\r\n");
            postDataWriter.Write ("Content-Disposition: form-data;"
            + "name=\"{0}\";"
            + "filename=\"{1}\""
            + "\r\nContent-Type: {2}\r\n\r\n",
            "file", // HTML : file="A.jpg"
            Path.GetFileName (fileUrl),
            Path.GetExtension (fileUrl));
            postDataWriter.Flush ();
                                 
            // 讀取檔案
            FileStream fileStream = new FileStream (fileUrl, FileMode.Open, FileAccess.Read);
            byte[] buffer = new byte[1024];
            int bytesRead = 0;
            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) {
                postDataStream.Write (buffer, 0, bytesRead);
            }
            fileStream.Close ();
 
            postDataWriter.Write ("\r\n--" + boundaryString + "--\r\n");
            postDataWriter.Flush ();
 
            // 設定 HTTP 內容大小
            requestToServerEndpoint.ContentLength = postDataStream.Length;
 
            // 從 Memory Stream 到 Request Stream
            using (Stream s = requestToServerEndpoint.GetRequestStream()) {
                postDataStream.WriteTo (s);
            }
            postDataStream.Close ();
 
    }
}




 
arrow
arrow
    全站熱搜

    黃彥霖 發表在 痞客邦 留言(0) 人氣()