C# HttpClient Post参数同时上传文件的实现
更新时间:2022年06月09日 09:36:38 作者:luofeng0710
这篇文章主要介绍了C# HttpClient Post参数同时上传文件的实现,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
HttpClient Post参数同时上传文件
Demo 如下
using (var client = new HttpClient()) { using (var multipartFormDataContent = new MultipartFormDataContent()) { var values = new[] { new KeyValuePair<string, string>("c", "3"), new KeyValuePair<string, string>("c", "2"), new KeyValuePair<string, string>("d", "2") //other values }; foreach (var keyValuePair in values) { multipartFormDataContent.Add(new StringContent(keyValuePair.Value), String.Format("\"{0}\"", keyValuePair.Key)); } multipartFormDataContent.Add(new ByteArrayContent(System.IO.File.ReadAllBytes(@"D:\test.jpg")), "\"pic\"", "\"test.jpg\""); var requestUri = "http://localhost:8080"; var html = client.PostAsync(requestUri, multipartFormDataContent).Result.Content.ReadAsStringAsync().Result; } }
HttpClient上传文件到服务器(multipart/form-data)
string reqUrl = JsonrpcHttpClient.MakeRpcUrl(typeof(Wfm_SimReport).Name, "save"); using (HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false }))//若想手动设置Cookie则必须设置UseCookies = false { string boundary = string.Format("----WebKitFormBoundary{0}",DateTime.Now.Ticks.ToString("x")); MultipartFormDataContent content = new MultipartFormDataContent(boundary); #region 设置请求参数 content.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data"); content.Headers.Add("Cookie", TokenManager.Token); content.Headers.Add("client", "true"); #endregion if (string.IsNullOrEmpty(fullPath) && !File.Exists(fullPath)) { return false; } string fileName = Path.GetFileName(fullPath); #region Stream请求 FileStream fStream = File.Open(fullPath, FileMode.Open, FileAccess.Read); content.Add(new StreamContent(fStream, (int)fStream.Length), "file", fileName); #endregion content.Add(new StringContent(JsonHelper.Serialize(entity)), "dtoStr"); var result = client.PostAsync(reqUrl, content).Result; try { if (result.IsSuccessStatusCode) { string rslt = result.Content.ReadAsStringAsync().Result; Debug.WriteLine(rslt); return true; } } catch (Exception ex) { Debug.WriteLine(string.Format("获取服务器返回结果错误:消息:{0},堆栈:{1}",ex.Message,ex.StackTrace)); } finally { //关闭文件流 fStream.Close(); client.Dispose(); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
一文详解C#中重写(override)及覆盖(new)的区别
这篇文章主要为大家详细介绍了C#中重写(override)及覆盖(new)这两个关键词的区别,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下2023-03-03DataGridView不显示最下面的新行、判断新增行、删除行操作
这篇文章介绍了DataGridView不显示最下面的新行、判断新增行、删除行的操作方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-02-02CAD2008+VS2008开发ObjectARX加载失败问题(推荐)
这篇文章主要介绍了CAD2008+VS2008开发ObjectARX加载失败问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-04-04
最新评论