C# 使用HttpClient上傳文件并附帶其他參數(shù)的步驟
HttpClient
和MultipartFormDataContent
(傳送門)最低適用于.NET Framework 4.5版本
發(fā)送端代碼
using (HttpClient client = new HttpClient()) { var content = new MultipartFormDataContent(); //添加字符串參數(shù),參數(shù)名為qq content.Add(new StringContent("123456"), "qq"); string path = Path.Combine(System.Environment.CurrentDirectory, "1.png"); //添加文件參數(shù),參數(shù)名為files,文件名為123.png content.Add(new ByteArrayContent(System.IO.File.ReadAllBytes(path)), "file", "123.png"); var requestUri = "http://192.168.1.108:56852/api/Test/SaveFile"; var result = client.PostAsync(requestUri, content).Result.Content.ReadAsStringAsync().Result; Console.WriteLine(result); }
接收端代碼
[HttpPost] public async Task<JsonResult> SaveFile([FromForm]string qq, IFormFile file) { return await Task.Run(() => { try { //保存文件到本地 var filefullPath = Path.Combine(Directory.GetCurrentDirectory(), file.FileName); using (FileStream fs = new FileStream(filefullPath, FileMode.Create)) { file.CopyTo(fs); fs.Flush(); } } catch (Exception ex) { return Fail(file.FileName + "---" + ex.Message); } return Success(); }); }
注意:如果要通過參數(shù)形式接收數(shù)據(jù),需要確保參數(shù)名稱和上面發(fā)送請求中設(shè)置的名稱一致,否則無法自動綁定到參數(shù)中,且需要給參數(shù)加上[FromForm]的標(biāo)記。
使用model對象接收數(shù)據(jù)
public class SaveFileModel { public string qq { get; set; } public IFormFile File { get; set; } } public async Task<JsonResult> SaveFile([FromForm]SaveFileModel model) { //...... }
使用HttpContext從請求的Form中獲取數(shù)據(jù)
public async Task<JsonResult> SaveFile() { return await Task.Run(() => { var files = HttpContext.Request.Form.Files; var qq = HttpContext.Request.Form["qq"]; //...... }); }
總結(jié)
這個問題是在寫一個.Net Core
項目時遇到的,以前在.Net Framework 4.0
的時候,使用string
拼接表單中文件的內(nèi)容,到處都是boundary
分界線。用MultipartFormDataContent
來進行表單提交上傳文件是它內(nèi)部幫我們拼接了這個復(fù)雜的內(nèi)容。(可以用Fiddler
抓一下請求看看)emm...我去找一下當(dāng)初是怎么弄的文件上傳,如果有再更新此文。
以上就是C# 使用HttpClient上傳文件并附帶其他參數(shù)的步驟的詳細內(nèi)容,更多關(guān)于C# 使用HttpClient上傳文件的資料請關(guān)注腳本之家其它相關(guān)文章!