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#通用登录模块分享

    c#通用登录模块分享

    这是一款简单的ASP.NETC#注册登录模块制作思路,非常简单实用,虽然没怎么考虑登陆的安全性,但作为C#的朋友学习交流使用。
    2016-07-07
  • C#.Net ArrayList的使用方法

    C#.Net ArrayList的使用方法

    这篇文章主要介绍了C#.Net ArrayList的使用方法,使用动态数组的优点是可以根据用户需要,有效利用存储空间,需要的朋友可以参考下
    2015-10-10
  • 使用递归算法求第30位数的值

    使用递归算法求第30位数的值

    这篇文章主要介绍了使用递归求第30位数的值,需要的朋友可以参考下
    2014-02-02
  • c#使用IAsyncEnumerable实现流式分段传输

    c#使用IAsyncEnumerable实现流式分段传输

    这篇文章主要为大家详细介绍了c#如何使用IAsyncEnumerable实现流式分段传输,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • 浅析WPF中控件拖拽与拖动的实现

    浅析WPF中控件拖拽与拖动的实现

    这篇文章主要为大家详细介绍了如何在WPF中实现控件拖拽与拖动的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C#之HttpClient设置cookies的两种方式

    C#之HttpClient设置cookies的两种方式

    这篇文章主要介绍了C#之HttpClient设置cookies的两种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • C#判断一个图像是否是透明的GIF图的方法

    C#判断一个图像是否是透明的GIF图的方法

    这篇文章主要介绍了C#判断一个图像是否是透明的GIF图的方法,涉及C#针对gif图片属性的相关操作技巧,需要的朋友可以参考下
    2015-06-06
  • C# WebApi CORS跨域问题解决方案

    C# WebApi CORS跨域问题解决方案

    本篇文章主要介绍了C# WebApi CORS跨域问题解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • c#获取图片正确格式的方法

    c#获取图片正确格式的方法

    这篇文章主要介绍了c#获取图片正确格式的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Enterprise Library for .NET Framework 2.0缓存使用实例

    Enterprise Library for .NET Framework 2.0缓存使用实例

    这篇文章主要介绍了Enterprise Library for .NET Framework 2.0缓存使用实例,是进行项目开发时非常有用的功能,需要的朋友可以参考下
    2014-08-08

最新评论