/// <summary>
/// httpWebRequest post by dic
/// </summary>
/// <param name="url">url</param>
/// <param name="APIID">appid</param>
/// <param name="dicParams">参数</param>
/// <param name="filePath">文件路径</param>
/// <param name="fileParamName">文件对应的参数名</param>
/// <returns></returns>
public static string httpWebRequestPost(string url, string APIID, Dictionary<string, string> dicParams,
string filePath, string fileParamName)
{ string boundary = "ceshi"//getRandomString(32, true, true, false, false, "");
string Enter = "\r\n"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "multipart/form-data;boundary=" + boundary; Stream requestStream = request.GetRequestStream(); int dicParamsIndex = 0;
#region 写入请求流
foreach (var item in dicParams)
{
#region 定义请求体中的内容 并转成二进制
string s = dicParamsIndex == 0 ? "" : Enter; s += "--" + boundary + Enter
+ "Content-Disposition: form-data; name=\"" + item.Key + "\"" + Enter + Enter
+ item.Value;
var bytes = Encoding.UTF8.GetBytes(s);//encrypt所有字符串二进制
#endregion
#region 将各个二进制 写入请求流
requestStream.Write(bytes, 0, bytes.Length);
#endregion dicParamsIndex++;
}
#endregion #region 将文件转成二进制
if (fileParamName != "" && filePath != "")
{
string fileName = System.IO.Path.GetFileName(filePath);
byte[] fileBytes = File.ReadAllBytes(filePath); string fileStr = Enter + "--" + boundary + Enter
+ "Content-Type:application/octet-stream" + Enter
+ "Content-Disposition: form-data; name=\"file\"; " +
"filename=\"" + fileName + "\"" + Enter + Enter;
var fileStrByte = Encoding.UTF8.GetBytes(fileStr);//encrypt所有字符串二进制 requestStream.Write(fileStrByte, 0, fileStrByte.Length);
requestStream.Write(fileBytes, 0, fileBytes.Length);
} #endregion #region 结束标签 string endStr = Enter + "--" + boundary + "--";
var endBytes = Encoding.UTF8.GetBytes(endStr);
requestStream.Write(endBytes, 0, endBytes.Length); #endregion #region 发送请求
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//发送
Stream responseStream = response.GetResponseStream();//获取返回值
StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
string responseString = streamReader.ReadToEnd();
streamReader.Close();
responseStream.Close();
#endregion return responseString;
}

  

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. C# WPF后台动态添加控件(经典)

    概述 在Winform中从后台添加控件相对比较容易,但是在WPF中,我们知道界面是通过XAML编写的,如何把后台写好的控件动态添加到前台呢?本节举例介绍这个问题. 这里要用到UniformGrid布局 ...

  2. linux篇-linux 下tomcat服务每天定时启动

    1l先准备一个脚本 #!/bin/sh #./etc/profile export JAVA_HOME=/usr/java/jdk1.6.0_45 sh /home/tomcat-bingchuang ...

  3. 树莓派使用Docker部署EdgeX(jakarta版本)

    使用Docker部署EdgeX 老师安排我搞边缘计算,搞了很久都没能明白边缘计算是什么,甚至对其兴趣不大,前一阵弄好了lorawan网关,该做网关内部的边缘计算了,发现自己已经慢慢地学了进去,总是想要 ...

  4. 『忘了再学』Shell基础 — 30、sed命令的使用

    目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...

  5. 2 Elment Ui 日期选择器 格式化问题

    Elment Ui 日期选择器 格式化问题 在前后端联调过程中 我们常常会遇到日期无法被反序列化 这个问题 会有点头疼 下面以我这边为例 后端使用的是springboot 默认集成了jackjson ...

  6. 轻松上手Fluentd,结合 Rainbond 插件市场,日志收集更快捷

    以往有篇文章介绍 EFK(Kibana + ElasticSearch + Filebeat)的插件日志收集.Filebeat 插件用于转发和集中日志数据,并将它们转发到 Elasticsearch ...

  7. vue开发必须知道的小技巧

    近年来,vue越来越火,使用它的人也越来越多.vue基本用法很容易上手,但是还有很多优化的写法你就不一定知道了.本文列举了一些vue常用的开发技巧.require.context() 在实际开发中,绝 ...

  8. python基础知识-day8(动态参数)

    1.动态参数 函数的形式参数个数不确定.函数的形式数据类型不确定,使用动态参数,*代表元组,**代表字典. 2.代码案例演示 1 def func(*args,**kwargs): 2 print(a ...

  9. Linux文件查找实现

    文件查找 locate:非实时查找(依赖数据库的方式) find(实时查找) locate:-- 模糊搜索(不适合经常改变的文件) locate 查询系统上预建的文件索引数据库 /var/lib/ml ...

  10. js--js实现基础排序算法

    前言 文本来总结常见的排序算法,通过 JvavScript  来实现 正文 1.冒泡排序 算法思想:比较相邻两个元素的大小,如果第一个比第二个大,就交换它们.从头遍历到尾部,当一轮遍历完后,数组最后一 ...