首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

WP8.1 HttpClient上傳二進制文件:MultipartFormDataContent構建標準POST請求

     編輯:程式設計綜合問答

需求

POST請求上傳:用戶名(string)、圖片(byte[])、文件名(string)到WebService。

標準方案:Multipart/form-data

using (var client = new HttpClient()) {
    using (var content = new MultipartFormDataContent()) {
        // 字符串字段
        content.Add(new StringContent(username), "username");
        content.Add(new StringContent(filename), "filename");
        
        // 二進制文件
        var fileContent = new ByteArrayContent(imageBytes);
        fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
        content.Add(fileContent, "image", filename); // 參數名、文件名
        
        // 發送請求
        HttpResponseMessage response = await client.PostAsync("https://www.csdn.com/PleaseHelpMe", content);
        string result = await response.Content.ReadAsStringAsync();
    }
}

關鍵點

  1. MultipartFormDataContent自動生成boundary,構建符合RFC 7578標準的請求體。
  2. ByteArrayContent包裝byte[],設置Content-Type(如image/jpeg、application/octet-stream)。
  3. Add(content, name, filename)重載指定Content-Disposition: form-data; name="image"; filename="xxx.jpg"。

服務端接收對應

  • ASP.NET Core: [FromForm] string username, [FromForm] IFormFile image。
  • Java Spring: @RequestParam("username") String username, @RequestParam("image") MultipartFile image。
  • PHP: $_POST['username'], $_FILES['image']。

替代:Base64編碼嵌入JSON(不推薦大文件)

var json = new {
    username = username,
    filename = filename,
    imageBase64 = Convert.ToBase64String(imageBytes)
};
var jsonContent = new StringContent(JsonConvert.SerializeObject(json), Encoding.UTF8, "application/json");
await client.PostAsync(url, jsonContent);

缺點:體積膨脹33%、解碼耗CPU、非流式傳輸。

調試技巧

  • Fiddler/Charles抓包對比請求體格式。
  • 設置HttpClientHandler代理到Fiddler:new HttpClientHandler { Proxy = new WebProxy("127.0.0.1", 8888) }。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved