當前位置: 妍妍網 > 碼農

C#使用HttpClient上傳檔(multipart表單)

2024-02-17碼農

在C#中,你可以使用 HttpClient 類來上傳檔到伺服器。這通常涉及到建立一個multipart/form-data請求,該請求將檔作為請求的一部份發送到伺服器。以下是一個詳細的技術文章,介紹如何使用 HttpClient 上傳檔。

1. 建立HttpClient例項

首先,你需要建立一個 HttpClient 例項。這個例項將用於發送HTTP請求。

using System.Net.Http;
HttpClient client = new HttpClient();

2. 準備multipart/form-data內容

為了上傳檔,你需要構建一個multipart/form-data的內容。這通常涉及到建立一個 MultipartFormDataContent 物件,並向其中添加檔和其他表單欄位。

using System.Net.Http.Headers;
using System.IO;
var multiForm = new MultipartFormDataContent();
// 添加檔
var fileContent = new StreamContent(File.OpenRead("path_to_file"));
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
fileContent.Headers.ContentDisposition = ContentDispositionHeaderValue.Parse($"form-data; name=\"file\"; filename=\"{Path.GetFileName("path_to_file")}\"");
multiForm.Add(fileContent);
// 添加其他表單欄位(如果需要)
multiForm.Add(new StringContent("field_value"), "field_name");

3. 發送POST請求

使用 HttpClient PostAsync 方法發送multipart/form-data請求。

using System.Threading.Tasks;
// 伺服器URL
string url = "http://example.com/upload";
// 發送請求
HttpResponseMessage response = await client.PostAsync(url, multiForm);
// 檢查響應狀態
response.EnsureSuccessStatusCode();
// 讀取響應內容(如果需要)
string responseBody = await response.Content.ReadAsStringAsync();


4. 錯誤處理和異常捕獲

在發送HTTP請求時,你應該始終處理可能的錯誤和異常。

try
{
// 發送請求的程式碼
// ...
}
catch (HttpRequestException e)
{
// 處理請求異常
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
}

5. 釋放HttpClient資源

完成請求後,最好釋放 HttpClient 例項的資源。

client.Dispose();

註意事項

  • 確保你的應用程式具有存取檔和網路的許可權。

  • 如果上傳大檔,考慮增加 HttpClient 的超時設定。

  • 處理網路錯誤和伺服器響應,確保程式碼的健壯性。

  • 當你不再需要 HttpClient 例項時,記得釋放它占用的資源。

  • 透過結合 HttpClient 和multipart/form-data內容,你可以輕松地在C#中上傳檔到伺服器。這種方法適用於許多現代Web服務,尤其是那些使用RESTful API的服務。