C#中的multipart/form-data提交文件和參數(shù)
更新時間:2022年06月09日 09:18:49 作者:qq_34611658
這篇文章主要介紹了C#中的multipart/form-data提交文件和參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
C# multipart/form-data提交文件和參數(shù)
public static string PostJsonData(string url, Dictionary<string, string> dic, string imgfile) { string str = ""; try { HttpClient client = new HttpClient(); var postContent = new MultipartFormDataContent(); string boundary = string.Format("--{0}", DateTime.Now.Ticks.ToString("x")); postContent.Headers.Add("ContentType", $"multipart/form-data, boundary={boundary}"); string image_file_Type="faceImage"; postContent.Add(new ByteArrayContent(File.ReadAllBytes(imgfile)), image_file_Type, imgfile); foreach (var key in dic.Keys) { postContent.Add(new StringContent(dic[key].ToString()), key); } HttpResponseMessage response = client.PostAsync(url, postContent).Result; str = response.Content.ReadAsStringAsync().Result; } catch (Exception ex) { Log.Print("PostJsonData:" + ex.ToString()); } return str; }
C# POST multipart/form-data案例
using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using XingcOpen.ILS.Business.Interface; using XingcOpen.ILS.Core.Model; using XingcOpen.ILS.Core.Log; using XingcOpen.ILS.Business.Config.Module; using XingcOpen.ILS.Business.Config; using System.Threading; using System.IO; using Newtonsoft.Json.Linq; using System.Net.Http.Headers; using Newtonsoft.Json; using System.Windows.Forms; namespace XingcOpen.ILS.Business.ExpressSystemApi.Client { /// <summary> /// 韓國圖片上報接口 /// </summary> class HanGuoLogisticsPic : ISendPackageInfo { public bool CheckProcessHasRun() { throw new NotImplementedException(); } UserConfigInfo config = UserConfigHelper.GetInstance().userConfig; private static object _loc = new object(); private Thread DSuPicUpload; public bool CheckTicketNumHasEffective(string ticketsNum) { throw new NotImplementedException(); } public CommonResult GeneralSendTicketsNumAndPackageWeight(TicketInfo info) { throw new NotImplementedException(); } public bool SendTicketsNumAndPackageWeight(string barcode, double weight, double length, double width, double height, double volume) { //定義圖片絕對路徑 //var ListImage = config.PicSavePath + @"\" + DateTime.Now.ToString("yyyyMMdd") + @"\" + barcode + ".jpg"; try { 圖片上傳 DSuPicUpload = new Thread(() => UploadPic(barcode)); DSuPicUpload.Start(); return true; } catch (Exception ex) { Logger<HanGuoLogisticsPic>.Error("線程啟動異常," + ex.Message); return false; } } public T SendTicketsNumAndPackageWeight<T>(Dictionary<string, object> packageDic) { throw new NotImplementedException(); } #region 圖片上報接口 private void UploadPic(string barcode) { while (true) { if (config.IsSavePic == 1) { //上傳圖片 DoLocalImgUpload(Path.Combine(config.PicSavePath, DateTime.Now.ToString("yyyyMMdd")), barcode); DoLocalImgUpload(Path.Combine(config.PicSavePath, DateTime.Now.AddDays(-1).ToString("yyyyMMdd")), barcode); } Thread.Sleep(3000); } } public void DoLocalImgUpload(string picFilepath, string barcode) { try { if (Directory.Exists(picFilepath)) { DirectoryInfo directoryInfo = new DirectoryInfo(picFilepath); //取圖片文件夾下的1分鐘之前的圖片的前5張(按創(chuàng)建時間排序) //防止文件被占用 lock (_loc) { var topfiles = directoryInfo.EnumerateFiles(). Where(p => p.CreationTime <= DateTime.Now.AddMinutes(-1)). OrderBy(f => f.CreationTime). Take(5).ToList(); // topfiles.Distinct(); topfiles.OrderByDescending(x => x.FullName).Distinct(); if (topfiles.Count > 0) { //循環(huán)執(zhí)行上傳 foreach (var fileInfo in topfiles) // for (var i = 0; i < topfiles.Count; i++) { Logger<HanGuoLogisticsPic>.Debug("topfiles.count:" + topfiles.Count + " fileInfo:" + fileInfo.FullName); UploadLocalByName(fileInfo.FullName, barcode); //topfiles.Remove(fileInfo); } topfiles.Clear(); Thread.Sleep(1000); Logger<HanGuoLogisticsPic>.Debug("圖片上傳線程循環(huán)上傳中!"); } } } } catch (Exception ex) { Logger<HanGuoLogisticsPic>.Error(".圖片文件上傳發(fā)生異常!", ex); } } public void UploadLocalByName(string picFilepath, string barcode) { string url = @"http://www.kwaiden.com/SendPackageInfo/ApiPhoto_I.asp"; try { Logger<HanGuoLogisticsPic>.Debug("picFilepath:" + picFilepath); if (File.Exists(picFilepath)) { int pos = picFilepath.LastIndexOf("\\"); string name = picFilepath.Substring(pos + 1); string nums = name.Replace(".jpg", ""); //string userPhoto = string.Empty; //byte[] bytes = File.ReadAllBytes(picFilepath); //userPhoto = Convert.ToBase64String(bytes); //userPhoto = userPhoto.Replace("+", "%2B"); if (UploadImages(nums, name, picFilepath, url, barcode)) { //上傳完是否需要刪除? File.Delete(picFilepath); } } } catch (Exception ex) { Logger<HanGuoLogisticsPic>.Error(".圖片文件上傳發(fā)生異常!", ex); } } public bool UploadImages(string code, string name, string picFilepath, string url, string barcode) { try { string result = SendData(picFilepath, name, url, barcode, null, null); var i = JObject.Parse(result); if (i["result"].ToString().Trim() == "true") { //播放聲音文件 string strPath = Path.Combine(Application.StartupPath, @"config\sound") + "\\" + "Right.wav"; if (File.Exists(strPath)) { System.Media.SoundPlayer sndPlayer2 = new System.Media.SoundPlayer(strPath); sndPlayer2.Play(); } else { Logger<HanGuoLogistics>.Error("PlaySoundSendSuccess。 不存在聲音文件:" + strPath); } return true; } else { //播放聲音文件 string strPath = Path.Combine(Application.StartupPath, @"config\sound") + "\\" + "Wrong.wav"; if (File.Exists(strPath)) { System.Media.SoundPlayer sndPlayer2 = new System.Media.SoundPlayer(strPath); sndPlayer2.Play(); } else { Logger<HanGuoLogistics>.Error("PlaySoundSendSuccess。 不存在聲音文件:" + strPath); } return false; } } catch (Exception e) { Logger<HanGuoLogisticsPic>.Error("上傳圖片異常 " + e); } return false; } public string SendData(string picFilepath, string name, string url, string barcode, string workConsole, string destination) { var fileContent1 = new ByteArrayContent(File.ReadAllBytes(picFilepath)); fileContent1.Headers.ContentDisposition = new ContentDispositionHeaderValue("file") { FileName = name }; var postContent = new MultipartFormDataContent(); postContent.Add(new StringContent(barcode), "ticketsNum"); postContent.Add(fileContent1);//圖片文件 postContent.Add(new StringContent(workConsole), "workConsole"); postContent.Add(new StringContent(destination), "destination"); Logger<HanGuoLogisticsPic>.Debug("向"+config.HttpPostApiAddr+"發(fā)送數(shù)據(jù)"+JsonConvert.SerializeObject(postContent)); string httpResult = GetHttpPostResponse(url, postContent); Logger<HanGuoLogisticsPic>.Debug("接收" + config.HttpPostApiAddr + "返回數(shù)據(jù)" + httpResult); return httpResult; } private string GetHttpPostResponse(string url, MultipartFormDataContent postData) { string result = ""; //form表單格式傳參 try { HttpClient client = new HttpClient(); HttpResponseMessage response = client.PostAsync(url, postData).Result; result = response.Content.ReadAsStringAsync().Result; } catch (Exception ex) { result = ex.Message; } Logger<HanGuoLogisticsPic>.Debug($"HanGuoLogistics 返回數(shù)據(jù):{result}"); return result; } /// <summary> /// 參數(shù)上報 /// </summary> public class ImageInfo { public string ticketsNum { get; set; } public string file { get; set; } public string workConsole { get; set; } public string destination { get; set; } } /// <summary> /// 返回信息 /// </summary> public class ImageResult { public bool result { get; set; } public string message { get; set; } } #endregion } }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
c#使用IAsyncEnumerable實現(xiàn)流式分段傳輸
這篇文章主要為大家詳細介紹了c#如何使用IAsyncEnumerable實現(xiàn)流式分段傳輸,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習一下2023-10-10C#之HttpClient設(shè)置cookies的兩種方式
這篇文章主要介紹了C#之HttpClient設(shè)置cookies的兩種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11Enterprise Library for .NET Framework 2.0緩存使用實例
這篇文章主要介紹了Enterprise Library for .NET Framework 2.0緩存使用實例,是進行項目開發(fā)時非常有用的功能,需要的朋友可以參考下2014-08-08