// 一般使用 WWW 能處理就用 WWW 來處理
// 如果 WWW 不符合你需求可以選擇 WebClient 來處理
// 如果連 WebClient 都不能符合你需求,再來看這邊文章吧...
// 因為這篇文章已經寫到 HTTP 底層了,所以程式碼會較多
// 但 可以控制的範圍非常廣,基本上都能符合您的需求
// 祝您使用愉快 ~
using UnityEngine;
// 如果 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 ();
}
}
全站熱搜
留言列表