软件编程
位置:首页>> 软件编程>> C#编程>> C#中的multipart/form-data提交文件和参数

C#中的multipart/form-data提交文件和参数

作者:qq_34611658  发布时间:2021-09-26 09:40:19 

标签:multipart,form-data,提交文件,参数

C# multipart/form-data提交文件和参数

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张(按创建时间排序)
                   //防止文件被占用
                   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)
                       {
                           //循环执行上传
                           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("图片上传线程循环上传中!");
                       }
                   }
               }
           }
           catch (Exception ex)
           {
               Logger<HanGuoLogisticsPic>.Error(".图片文件上传发生异常!", 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(".图片文件上传发生异常!", 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+"发送数据"+JsonConvert.SerializeObject(postContent));
           string httpResult = GetHttpPostResponse(url, postContent);
           Logger<HanGuoLogisticsPic>.Debug("接收" + config.HttpPostApiAddr + "返回数据" + 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 返回数据:{result}");
           return result;
       }
       /// <summary>
       /// 参数上报
       /// </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
   }
}

来源:https://blog.csdn.net/qq_34611658/article/details/105530402

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com