C# HttpClient Post参数同时上传文件的实现

 更新时间:2022年06月09日 09:36:38   作者:luofeng0710  
这篇文章主要介绍了C# HttpClient Post参数同时上传文件的实现,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

HttpClient Post参数同时上传文件

Demo 如下

using (var client = new HttpClient())
{
    using (var multipartFormDataContent = new MultipartFormDataContent())
    {
        var values = new[]
        {
            new KeyValuePair<string, string>("c", "3"),
            new KeyValuePair<string, string>("c", "2"),
            new KeyValuePair<string, string>("d", "2")
             //other values
        };
 
        foreach (var keyValuePair in values)
        {
            multipartFormDataContent.Add(new StringContent(keyValuePair.Value),
                String.Format("\"{0}\"", keyValuePair.Key));
        }
 
        multipartFormDataContent.Add(new ByteArrayContent(System.IO.File.ReadAllBytes(@"D:\test.jpg")),
            "\"pic\"",
            "\"test.jpg\"");
 
        var requestUri = "http://localhost:8080";
        var html = client.PostAsync(requestUri, multipartFormDataContent).Result.Content.ReadAsStringAsync().Result;
    }
}

HttpClient上传文件到服务器(multipart/form-data)

string reqUrl = JsonrpcHttpClient.MakeRpcUrl(typeof(Wfm_SimReport).Name, "save");
using (HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false }))//若想手动设置Cookie则必须设置UseCookies = false
{
                               
    string boundary = string.Format("----WebKitFormBoundary{0}",DateTime.Now.Ticks.ToString("x"));
    MultipartFormDataContent content = new MultipartFormDataContent(boundary);
 
    #region 设置请求参数
    content.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
    content.Headers.Add("Cookie", TokenManager.Token);
    content.Headers.Add("client", "true");
 
    #endregion
    if (string.IsNullOrEmpty(fullPath) && !File.Exists(fullPath))
    {
        return false;
    }
 
    string fileName = Path.GetFileName(fullPath);
 
    #region Stream请求
    FileStream fStream = File.Open(fullPath, FileMode.Open, FileAccess.Read);
    content.Add(new StreamContent(fStream, (int)fStream.Length), "file", fileName);
                
    #endregion
    content.Add(new StringContent(JsonHelper.Serialize(entity)), "dtoStr");
    var result = client.PostAsync(reqUrl, content).Result;
 
    try
    {
        if (result.IsSuccessStatusCode)
        {
            string rslt = result.Content.ReadAsStringAsync().Result;
            Debug.WriteLine(rslt);
            return true;
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine(string.Format("获取服务器返回结果错误:消息:{0},堆栈:{1}",ex.Message,ex.StackTrace));
    }
    finally
    {
        //关闭文件流
        fStream.Close();
        client.Dispose();
    }                
 }

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

相关文章

  • C#利用反射技术实现去掉按钮选中时的边框效果

    C#利用反射技术实现去掉按钮选中时的边框效果

    这篇文章主要介绍了C#利用反射技术实现去掉按钮选中时的边框效果,涉及C#针对窗口的参数设置技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 使用HttpHanlder处理404:File not found的问题

    使用HttpHanlder处理404:File not found的问题

    本篇文章小编为大家介绍。使用HttpHanlder处理404:File not found的问题。需要的朋友参考下
    2013-04-04
  • C# ref and out的使用小结

    C# ref and out的使用小结

    这篇文章主要介绍了C# ref and out的使用小结,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • 详解C#如何优雅地终止线程

    详解C#如何优雅地终止线程

    在大多情况下,我们只关心线程的创建与启动,运行,却并不关心线程的结束或者终止。今天这篇文章,我们就以一些简单的小例子,简述如何有效的停止线程,仅供学习分享使用,如有不足之处,还请指正
    2023-03-03
  • Unity UGUI的VerticalLayoutGroup垂直布局组件介绍使用

    Unity UGUI的VerticalLayoutGroup垂直布局组件介绍使用

    这篇文章主要为大家介绍了Unity UGUI的VerticalLayoutGroup垂直布局组件介绍使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • C#预处理器指令详解与示例

    C#预处理器指令详解与示例

    在软件开发中,我们常常需要编写可移植和可配置的代码,C# 预处理器指令为我们提供了这样的能力,在本篇文章中,我们将详细介绍C#预处理器指令的定义、语法格式、功能以及在实际编程中的应用,需要的朋友可以参考下
    2024-04-04
  • Visual Studio 未能加载各种Package包的解决方案

    Visual Studio 未能加载各种Package包的解决方案

    打开Visual Studio 的时候,总提示未能加载相应的Package包,有时候还无法打开项目,各种错误提示,怎么解决呢?下面小编给大家带来了Visual Studio 未能加载各种Package包的解决方案,一起看看吧
    2016-10-10
  • c#正反序列化XML文件示例(xml序列化)

    c#正反序列化XML文件示例(xml序列化)

    这篇文章主要介绍了c#正反序列化XML文件示例,可以将对象序列化为XML文本或者文件,或者将XML文件或文本反序列化为对象,要求进行序列化的对象不能出现序列化异常,支持类的嵌套,要求类的属性为public
    2014-03-03
  • 基于c#实现的九九乘法表(简单实例)

    基于c#实现的九九乘法表(简单实例)

    本文主要分享了基于c#实现的九九乘法表,代码简洁,需要的朋友可以参考下,希望对大家有所帮助
    2016-12-12
  • C#中比较两个List是否相等的常见方法

    C#中比较两个List是否相等的常见方法

    在 C# 里,比较两个 List 是否相等,需要考虑多个方面,例如列表中的元素顺序、元素本身是否相等,下面介绍几种常见的比较方法,需要的朋友可以参考下
    2025-04-04

最新评论