C# HttpClient上傳文件并附帶其它參數(shù)方式
更新時(shí)間:2023年11月07日 14:48:14 作者:csdmwinter
這篇文章主要介紹了C# HttpClient上傳文件并附帶其它參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
1、Fiddler抓包參數(shù)詳情
Content-Type: multipart/form-data; boundary="8d9ade1fd906a6a" Content-Length: 39356 --8d9ade1fd906a6a Content-Type: application/x-jpg Content-Disposition: form-data; name=file; filename=test.jpg ...文件二進(jìn)制流 --8d9ade1fd906a6a Content-Disposition: form-data; name=toes 123@qq.com --8d9ade1fd906a6a Content-Disposition: form-data; name=subject 測(cè)試發(fā)送附件 --8d9ade1fd906a6a Content-Disposition: form-data; name=Body 測(cè)試HttpClient發(fā)送文件+額外參數(shù)請(qǐng)求 --8d9ade1fd906a6a
2、使用MultipartFormDataContent封裝文件和其它參數(shù)
上傳文件時(shí)Content-Type是multipart/form-data,并且其它額外參數(shù)都要標(biāo)識(shí)form-data
- 2.1、把文件轉(zhuǎn)成ByteArrayContent
private static ByteArrayContent CreateByteArrayContent(string key, string fileName, string fileContent, byte[] fileBytes) { var fileByteArrayContent = new ByteArrayContent(fileBytes); fileByteArrayContent.Headers.ContentType = new MediaTypeHeaderValue(fileContent); fileByteArrayContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = key, //接口匹配name FileName = fileName //附件文件名 }; return fileByteArrayContent; }
- 2.2、把其它附件參數(shù)轉(zhuǎn)成ByteArrayContent
private static List<ByteArrayContent> CreateParamsByteArrayContent(IDictionary<string, string> dic) { var list = new List<ByteArrayContent>(); if (dic == null || dic.Count == 0) return list; foreach (var (key, value) in dic) { var valueBytes = Encoding.UTF8.GetBytes(value); var byteArray = new ByteArrayContent(valueBytes); byteArray.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = key }; list.Add(byteArray); } return list; }
- 2.3、構(gòu)建MultipartFormDataContent
private static MultipartFormDataContent CreateContent(byte[] bytes,IDictionary<string,string> addParams) { var strBoundary = DateTime.Now.Ticks.ToString("x"); //分隔符 var resultContent = new MultipartFormDataContent(strBoundary); //文件 var fileByteContent = CreateByteArrayContent("file", "test.jpg", "application/x-jpg", bytes); resultContent.Add(fileByteContent); //其它附加參數(shù) var paramsByteContent = CreateParamsByteArrayContent(addParams); paramsByteContent.ForEach(el => { resultContent.Add(el); }); return resultContent; }
3、發(fā)送請(qǐng)求
static async Task Main(string[] args) { var dic = new Dictionary<string, string> { {"toes", "111@qq.com"}, {"subject", "測(cè)試發(fā)送附件"}, {"Body", "測(cè)試HttpClient發(fā)送文件+額外參數(shù)請(qǐng)求"}, }; var filePath = @"d:\image\shui.jpg"; using (var fileStream = File.Open(filePath, FileMode.Open)) { var bytes = new byte[fileStream.Length]; fileStream.Read(bytes, 0, bytes.Length); using (var client = new HttpClient()) { var message = new HttpRequestMessage(HttpMethod.Post, "https://xxx/email/SendEmailIncludeAttach"); message.Content = CreateContent(bytes, dic); var responseMessage = await client.SendAsync(message); if (responseMessage.IsSuccessStatusCode) { var resStr = await responseMessage.Content.ReadAsStringAsync(); Console.WriteLine(resStr); } } } Console.ReadKey(); }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C#如何實(shí)現(xiàn)對(duì)sql server數(shù)據(jù)庫的增刪改查
本文的主要內(nèi)容是C#實(shí)現(xiàn)對(duì)sql server數(shù)據(jù)庫的增刪改查,示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-08-08C#中判斷本地系統(tǒng)的網(wǎng)絡(luò)連接狀態(tài)的方法
C#中一般通過InternetGetConnectedState函數(shù)返回本地系統(tǒng)的網(wǎng)絡(luò)連接狀態(tài),下面簡(jiǎn)單介紹下,需要的朋友可以參考下2013-10-10Unity使用DoTween實(shí)現(xiàn)拋物線效果
這篇文章主要為大家詳細(xì)介紹了Unity使用DoTween實(shí)現(xiàn)拋物線效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05基于StreamRead和StreamWriter的使用(實(shí)例講解)
下面小編就為大家分享一篇基于StreamRead和StreamWriter的使用實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-11-11