首页 > 编程语言 >C# HttpPost 【ContentType:multipart/form-data】表单提交 file 类型数据方法 2

C# HttpPost 【ContentType:multipart/form-data】表单提交 file 类型数据方法 2

时间:2023-03-10 09:33:05浏览次数:47  
标签:ContentType string form file var new fileInfo data

参考来源:https://blog.csdn.net/qq_39788123/article/details/128495546

 

try
{
  Dictionary<string, string> headerDict = new Dictionary<string, string>();
  NameValueCollection par = new NameValueCollection();
  //par.Add("dataSource", "数据源"); //数据源
  dynamic fileInfo = new ExpandoObject();
  fileInfo.fileName = "C:/Users/admin/Desktop/ico/A001.png"; //文件名
  byte[] fileByte = File.ReadAllBytes("C:/Users/admin/Desktop/ico/A001.png");
  fileInfo.fileByte = fileByte; //文件字节
  fileInfo.file = "file"; //字段名
  //请求
  string result = PostMultipartFormDataAsync("https://*******.co.th/**/getFileUrl", headerDict, par, fileInfo);
}
catch (System.Exception ex)
{
  Console.Write("SendThaiFormData Error:" + ex.Message);
}

 

/// <summary>
/// 使用multipart/form-data方式上传文件及其他数据
/// </summary>
/// <param name="requestUrl">请求接口地址</param>
/// <param name="headers">自定义header</param>
/// <param name="nameValueCollection">键值对参数</param>
/// <param name="fileInfo">文件信息</param>
/// <returns></returns>
public static string PostMultipartFormDataAsync(string requestUrl, Dictionary<string, string> headers, NameValueCollection nameValueCollection, dynamic fileInfo)
{
  var data = "";
  ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
    | SecurityProtocolType.Tls
    | SecurityProtocolType.Tls11
    | SecurityProtocolType.Tls12;
  using (var httpClient = new HttpClient())
  {
    try
    {

      //header参数
      foreach (var item in headers)
      {
        httpClient.DefaultRequestHeaders.Add(item.Key, item.Value);
      }

      using (var reduceAttach = new MultipartFormDataContent())
      {
        #region 键值对参数
        string[] allKeys = nameValueCollection.AllKeys;
        foreach (string key in allKeys)
        {
          var dataContent = new ByteArrayContent(Encoding.UTF8.GetBytes(nameValueCollection[key]));
          dataContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
          {
            Name = key
          };
          reduceAttach.Add(dataContent);
        }
        #endregion

        #region 文件参数
        if (fileInfo != null)
        {
          Stream fileStream = new MemoryStream(fileInfo.fileByte); //转成stream流
          var streamContent = new StreamContent(fileStream);
          var Content = new ByteArrayContent(streamContent.ReadAsByteArrayAsync().Result);//创建文件的content
          reduceAttach.Add(Content, fileInfo.file, fileInfo.fileName);
          streamContent.Dispose();
        }
        #endregion

        //请求
        var response = httpClient.PostAsync(requestUrl, reduceAttach).Result;
        data = response.Content.ReadAsStringAsync().Result;
      }
    }
    catch (Exception ex)
    {
      throw ex;
    }
  }
  return data;
}

标签:ContentType,string,form,file,var,new,fileInfo,data
From: https://www.cnblogs.com/wa502/p/17202256.html

相关文章

  • Platform平台总线模型
    Device.c文件:设备释放函数设备的资源信息platform_device结构体设备初始化函数设备退出函数 文件中涉及到的定义:/*寄存器的物理地址*/#defineCCM_CCGR1_BA......
  • element-ui的el-form表单和el-table校验_Example
    <template><div><el-dialog:title="'新建'":close-on-click-modal="false"append-to-body:visible.sync="visible"><el-form:model="dataF......
  • toFormData.js?9ba3:98 Uncaught (in promise) TypeError: target must be an object
    toFormData.js?9ba3:98Uncaught(inpromise)TypeError:targetmustbeanobject在做vue前端开发时,需要报错,,困扰我这个菜鸟挺久的,后来终于解决了,这里记录一下:  ......
  • 【WinForm】 自学笔记二:连接数据库以及查询结果显示
    本次使用 SqlConnection来连接数据库,使用DataGridView来显示查询的结果。最终效果如下:  一、连接数据库1.获取连接数据库所需的字符串,包括服务器名称,数据库名称......
  • C++常用遍历算法 transform
    功能:将容器搬运到另一个容器#include<iostream>#include<vector>#include<functional>#include<algorithm>usingnamespacestd;//遍历函数transformclassTr......
  • Django之form组件
    Form介绍我们在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。与此同时我们在好多场景下都需要对用户的输入做校......
  • java-IO-File类概述和构造方法
         ......
  • cdc-file-transfer 谷歌开源的windows 到linux 同步工具
    cdc-file-transfer是基于contentdefinedchunking以及fastcdc技术,cdc-file-transfer目前提供了两种工具cdc_rsync类似rsync的同步能力,进行文件拷贝,但是性能相比rsync......
  • File的获取和判断
    publicstaticvoidmain(String[]args)throwsIOException{Filef=newFile("C:\\a.txt");//isFile()方法测试此抽象路径名表示的File是否为......
  • Makefile编程基础
    一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至......