/// <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. vmware ubuntu 看不到网卡或连接不到网络

    执行以下命令就可以重新请求 dhcp 服务器,一般就可以联网了, ens33 是网卡名称,根据自己的情况替换 sudo dhclient ens33 右上角网络图标消失 # 先停止服务 sudo se ...

  2. 以圆类 Circle 及立体图形类 Solid 为基础设计球类 Sphere

    学习内容:以圆类 Circle 及立体图形类 Solid 为基础设计球类 Sphere 代码示例: package 实验三; import java.util.Scanner; class Point ...

  3. ES6 Promise 的链式调用

    1.什么是Promise Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息. 2.对象的状态不受外界影响.Promise 对象代表一个异步操作,有三种状态: pending: 初始 ...

  4. Vben Admin 源码学习:状态管理-错误日志

    0x00 前言 本文将对 Vue-Vben-Admin 的状态管理实现源码进行分析解读,耐心读完,相信您一定会有所收获! 0x01 errorLog.ts 错误日志 文件 src\store\modu ...

  5. 155_模型_Power BI & Power Pivot 进销存之安全库存

    155_模型_Power BI & Power Pivot 进销存之安全库存 一.背景 谈进销存的概念时,我们也需要提及另外一个概念:安全库存. 库存周转在理想的状态下是做到零库存,但是在内部 ...

  6. mybatis-plus对空字段 时间进行填充

    package com.tanhua.sso.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; imp ...

  7. Improved Security for a Ring-Based Fully Homomorphic Encryption Scheme-2013:解读

    本文记录阅读此论文的笔记 摘要 (1)1996年,HPS三人提出一个格上的高效加密方案,叫做NTRUEncrypt,但是没有安全性证明:之后2011年,SS等人修改此方案,将其安全规约到标准格上的困难 ...

  8. ExtJS 布局-Border 布局(Border layout)

    更新记录: 2022年6月11日 发布. 2022年6月1日 开始. 1.说明 边框布局允许根据区域(如中心.北部.南部.西部和东部)指定子部件的位置.还可以调整子组件的大小和折叠. 2.设置布局方法 ...

  9. spring boot用ide新建项目遇到的restcontroller不能导入的问题

    才开始学习spring boot,第一个程序helloworld就碰到@RestController和@RequestMapping(/hello)的注解都会报错的问题. 我个人的解决方法: 1.sp ...

  10. 全新升级的AOP框架Dora.Interception[6]: 框架设计和实现原理

    本系列前面的五篇文章主要介绍Dora.Interception(github地址,觉得不错不妨给一颗星)的编程模式以及对它的扩展定制,现在我们来聊聊它的设计和实现原理.(拙著<ASP.NET C ...