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

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

 public static string PostJsonData(string url, Dictionary 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
{
    /// 
    /// 韩国图片上报接口
    /// 
    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.Error("线程启动异常," + ex.Message);
                return false;
            }
        }
        public T SendTicketsNumAndPackageWeight(Dictionary 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.Debug("topfiles.count:" + topfiles.Count + "  fileInfo:" + fileInfo.FullName);
                                UploadLocalByName(fileInfo.FullName, barcode);
                                //topfiles.Remove(fileInfo);
                            }
                            topfiles.Clear();
                            Thread.Sleep(1000);
                            Logger.Debug("图片上传线程循环上传中!");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(".图片文件上传发生异常!", ex);
            }
        }
        public void UploadLocalByName(string picFilepath, string barcode)
        {
            string url = @"http://www.kwaiden.com/SendPackageInfo/ApiPhoto_I.asp";
            try
            {
                Logger.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.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.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.Error("PlaySoundSendSuccess。 不存在声音文件:" + strPath);
                    }
                    return false;
                }
            }
            catch (Exception e)
            {
                Logger.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.Debug("向"+config.HttpPostApiAddr+"发送数据"+JsonConvert.SerializeObject(postContent));
            string httpResult = GetHttpPostResponse(url, postContent);
            Logger.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.Debug($"HanGuoLogistics 返回数据:{result}");
            return result;
        }
        /// 
        /// 参数上报
        /// 
        public class ImageInfo
        {
            public string ticketsNum { get; set; }
            public string file { get; set; }
            public string workConsole { get; set; }
            public string destination { get; set; }
        }
        /// 
        /// 返回信息
        /// 
        public class ImageResult
        {
            public bool result { get; set; }
            public string message { get; set; }
        }
        #endregion
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

你可能感兴趣的:(C#中的multipart/form-data提交文件和参数)