1. /// <summary>
  2. /// httpWebRequest post by dic
  3. /// </summary>
  4. /// <param name="url">url</param>
  5. /// <param name="APIID">appid</param>
  6. /// <param name="dicParams">参数</param>
  7. /// <param name="filePath">文件路径</param>
  8. /// <param name="fileParamName">文件对应的参数名</param>
  9. /// <returns></returns>
  10. public static string httpWebRequestPost(string url, string APIID, Dictionary<string, string> dicParams,
  11. string filePath, string fileParamName)
  12. {
  13.  
  14. string boundary = "ceshi"//getRandomString(32, true, true, false, false, "");
  15. string Enter = "\r\n";
  16.  
  17. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  18. request.Method = "POST";
  19. request.ContentType = "multipart/form-data;boundary=" + boundary;
  20.  
  21. Stream requestStream = request.GetRequestStream();
  22.  
  23. int dicParamsIndex = 0;
  24. #region 写入请求流
  25. foreach (var item in dicParams)
  26. {
  27. #region 定义请求体中的内容 并转成二进制
  28. string s = dicParamsIndex == 0 ? "" : Enter;
  29.  
  30. s += "--" + boundary + Enter
  31. + "Content-Disposition: form-data; name=\"" + item.Key + "\"" + Enter + Enter
  32. + item.Value;
  33. var bytes = Encoding.UTF8.GetBytes(s);//encrypt所有字符串二进制
  34. #endregion
  35. #region 将各个二进制 写入请求流
  36. requestStream.Write(bytes, 0, bytes.Length);
  37. #endregion
  38.  
  39. dicParamsIndex++;
  40. }
  41. #endregion
  42.  
  43. #region 将文件转成二进制
  44. if (fileParamName != "" && filePath != "")
  45. {
  46. string fileName = System.IO.Path.GetFileName(filePath);
  47. byte[] fileBytes = File.ReadAllBytes(filePath);
  48.  
  49. string fileStr = Enter + "--" + boundary + Enter
  50. + "Content-Type:application/octet-stream" + Enter
  51. + "Content-Disposition: form-data; name=\"file\"; " +
  52. "filename=\"" + fileName + "\"" + Enter + Enter;
  53. var fileStrByte = Encoding.UTF8.GetBytes(fileStr);//encrypt所有字符串二进制
  54.  
  55. requestStream.Write(fileStrByte, 0, fileStrByte.Length);
  56. requestStream.Write(fileBytes, 0, fileBytes.Length);
  57. }
  58.  
  59. #endregion
  60.  
  61. #region 结束标签
  62.  
  63. string endStr = Enter + "--" + boundary + "--";
  64. var endBytes = Encoding.UTF8.GetBytes(endStr);
  65. requestStream.Write(endBytes, 0, endBytes.Length);
  66.  
  67. #endregion
  68.  
  69. #region 发送请求
  70. HttpWebResponse response = (HttpWebResponse)request.GetResponse();//发送
  71. Stream responseStream = response.GetResponseStream();//获取返回值
  72. StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
  73. string responseString = streamReader.ReadToEnd();
  74. streamReader.Close();
  75. responseStream.Close();
  76. #endregion
  77.  
  78. return responseString;
  79. }

  

C# 发送Http请求,传文件和其他参数的更多相关文章

  1. .Net使用HttpClient以multipart/form-data形式post上传文件及其相关参数

    前言: 本次要讲的是使用.Net HttpClient拼接multipark/form-data形式post上传文件和相关参数,并接收到上传文件成功后返回过来的结果(图片地址,和是否成功).可能有很多 ...

  2. JQuery发送ajax请求不能用数组作为参数

    JQuery发送ajax请求不能用数组作为参数,否则会接收不到参数, 一.js代码如下: $('#delete-button').click(function(){        var select ...

  3. HTML5+AJAX原生分块上传文件的关键参数设置

    processData:false 这是jquery.ajax的一个参数.默认值为true,表示会将非字符串对象自动变成k1=v1&k2=v2的形式,例如一个数组参数{d:[1,2]},到服务 ...

  4. jquery ajax 上传文件和传递参数到一个接口的实现方法

    参考:https://blog.csdn.net/qq_15674631/article/details/81095284 参考:https://www.jianshu.com/p/46e6e03a0 ...

  5. Django上传文件的那些参数

    # ################## 默认文件上传配置 ######################## from django.core.files.uploadhandler import M ...

  6. java 调用Spring接口上传文件及其他参数填充

    第一步:在Spring配置中添加以下内容 <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> < ...

  7. ajax异步上传文件之data参数----小哈学js

    下载ajaxFileUpload.js(下载网址:http://fileuploadajax.codeplex.com/downloads/get/20976) 修改ajaxFileUpload.js ...

  8. element-ui upload上传文件并携带参数 使用formData对象

    需求:上传文件的时候,需要携带其他的参数 问题:使用upload上传文件时,必须使用formData对象,而其他的参数通过data获取的到的,formData和data是不能同时传输的 解决:获取到的 ...

  9. JAVA发送POST请求携带JSON格式字符串参数

    import org.apache.commons.lang.StringUtils; import org.apache.http.HttpEntity; import org.apache.htt ...

随机推荐

  1. [源码解析] TensorFlow 分布式之 ClusterCoordinator

    [源码解析] TensorFlow 分布式之 ClusterCoordinator 目录 [源码解析] TensorFlow 分布式之 ClusterCoordinator 1. 思路 1.1 使用 ...

  2. node-sass,sass-loader和node之间的关系

    vue-cli运行在node平台上scss语言是运行在 node-sass平台上node-sass的运行环境是node平台vue-cli工程中不识别scss语法,.scss模块,sass-loader ...

  3. 用STM32玩L298N(正反转、调速)

    目录 用STM32玩L298N(正反转.调速) 控制直流电机正反转 使用PWM调速 用STM32玩L298N(正反转.调速) 开发板:STM32F103ZET6(正点原子F103核心板)/STM32F ...

  4. 【算法】Floyd算法

    什么是Floyd Floyd用于求最短路程.举个栗子,给你一张图,让你求出点[1]到点[5]的最短路程,你会怎么求? (画图工具:CS Academy) 如上图,有向边分别是 1->2  1-& ...

  5. 6月6日,HTTP/3 正式发布了!

    经过了多年的努力,在 6 月 6 号,IETF (互联网工程任务小组) 正式发布了 HTTP/3 的 RFC, 这是超文本传输协议(HTTP)的第三个主要版本,完整的 RFC 超过了 20000 字, ...

  6. [学习笔记]使用Docker+Jenkin自动化流水线发布.Net应用

    ​使用Docker容器方案可以快速安全地将项目部署到客户的服务器上,作为公司项目,需要解决两个问题: 1. 需要搭建一个私有的Docker仓库,以便安全的存储镜像 2. 需要一套自动化发布方案,实现代 ...

  7. Java绘图基础

    <零基础学Java> Java绘图基础 绘图是高级程序设计中非常重要的技术,例如,应用程序需要绘制闪屏图像.背景图像.组件外观Web程序可以绘制统计图.数据库存储的图像资源等. Graph ...

  8. Git使用 - 忽略特定文件 - gitignore

    1. 背景 2. 创建.gitignore 文件 3. 文件内容样式 4. exclude文件 5. gitignore 文件模板 6. 参考文档 1. 背景 前提知识:在工作目录下的每一个文件都不外 ...

  9. ABAP CDS-基础语法规则

    The general syntax rules for the DDL and the DCL in ABAP CDS are: Keywords Keywords must be all uppe ...

  10. ShardingSphere-proxy-5.0.0建立mysql读写分离的连接(六)

    一.修改配置文件config-sharding.yaml,并重启服务 # # Licensed to the Apache Software Foundation (ASF) under one or ...