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

 更新时间:2022年06月09日 09:18:49   作者:qq_34611658  
这篇文章主要介绍了C#中的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
    }
}

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

相关文章

  • C#简单读写txt文件的方法

    C#简单读写txt文件的方法

    这篇文章主要介绍了C#简单读写txt文件的方法,涉及C#针对文件的基本打开、写入、保存与读取等操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • C# 中const,readonly,static的使用小结

    C# 中const,readonly,static的使用小结

    这篇文章主要介绍了C# 中使用const,readonly,static的示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-01-01
  • c#学习教程之JSON文件及解析实例

    c#学习教程之JSON文件及解析实例

    json作为互联网上轻量便捷的数据传输格式,越来越受到重视,下面这篇文章主要给大家介绍了关于c#学习教程之JSON文件及解析的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 利用C#实现最基本的小说爬虫示例代码

    利用C#实现最基本的小说爬虫示例代码

    最近在学习c#,碰巧遇到个小说站不错,就索性当个练习,所以这篇文章主要给大家介绍了关于利用C#实现最基本的小说爬虫的相关资料,文中给出了详细的示例代码供大家参考学习,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • C#遍历集合与移除元素的方法

    C#遍历集合与移除元素的方法

    这篇文章主要介绍了C#遍历集合与移除元素的方法,结合实例形式分析了C#使用for循环遍历集合以及add与Remove方法进行元素添加与移除的使用技巧,需要的朋友可以参考下
    2016-06-06
  • C#支付宝新版支付请求接口调用

    C#支付宝新版支付请求接口调用

    这篇文章主要为大家详细介绍了C#支付宝新版支付请求接口调用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • C#中调用VB中Inputbox类的实现方法

    C#中调用VB中Inputbox类的实现方法

    本文主要介绍在项目中引用Microsoft.VisualBasic,间接使用VB中的各种类库的方法,或者自己创建函数,调用自定义方法,以实现InputBox相关的功能。
    2016-05-05
  • C#导入导出Excel数据的两种方法

    C#导入导出Excel数据的两种方法

    这篇文章主要为大家详细介绍了C#导入导出Excel数据的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • C#子线程执行完后通知主线程的方法

    C#子线程执行完后通知主线程的方法

    下面小编就为大家带来一篇C#子线程执行完后通知主线程的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C#中除去所有在HTML元素中标记

    C#中除去所有在HTML元素中标记

    C#中除去所有在HTML元素中标记...
    2007-03-03

最新评论