/// <summary>
/// C#调用接口上传json数据,并且带文件上传
/// </summary>
/// <param name="url">接口地址</param>
/// <param name="filePath">文件路径</param>
/// <returns></returns>
public string RequestPost(string url, string filePath)
{
//string filePath = AppDomain.CurrentDomain.BaseDirectory + "CountData"; + aa.txt
string campaignId = "123";
string mailingId = "567";
string plateForm = "cn";

string fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);
// E:\WEB\K11SH邮件服务V4-WP\WinServe\WinServe\bin\Debug\CountData\K11_hard_bounce.csv.gpg
//string filePath = AppDomain.CurrentDomain.BaseDirectory + "CountData" + Path.DirectorySeparatorChar.ToString() + Path.GetFileName("K11_hard_bounce.csv.gpg");

byte[] fileContentByte = new byte[1024]; // 文件内容二进制

#region 将文件转成二进制

FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
fileContentByte = new byte[fs.Length]; // 二进制文件
fs.Read(fileContentByte, 0, Convert.ToInt32(fs.Length));
fs.Close();

#endregion

#region 定义请求体中的内容 并转成二进制

string boundary = "ceshi";
string Enter = "\r\n";
string campaignIDStr = "--" + boundary + Enter
+ "Content-Disposition: form-data; name=\"campaignId\"" + Enter + Enter
+ campaignId + Enter;
string fileContentStr = "--" + boundary + Enter
+ "Content-Type:application/octet-stream" + Enter
+ "Content-Disposition: form-data; name=\"gnupgFile\"; filename=\"" + fileName + "\"" + Enter + Enter;
string updateTimeStr = Enter + "--" + boundary + Enter
+ "Content-Disposition: form-data; name=\"mailingId\"" + Enter + Enter
+ mailingId;
string encryptStr = Enter + "--" + boundary + Enter
+ "Content-Disposition: form-data; name=\"plateForm\"" + Enter + Enter
+ plateForm + Enter + "--" + boundary + "--";

byte[] campaignIDStrByte = Encoding.UTF8.GetBytes(campaignIDStr);//modelId所有字符串二进制
byte[] fileContentStrByte = Encoding.UTF8.GetBytes(fileContentStr);//fileContent一些名称等信息的二进制(不包含文件本身)
byte[] updateTimeStrByte = Encoding.UTF8.GetBytes(updateTimeStr);//updateTime所有字符串二进制
byte[] encryptStrByte = Encoding.UTF8.GetBytes(encryptStr);//encrypt所有字符串二进制
#endregion

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "multipart/form-data;boundary=" + boundary;

using (Stream myRequestStream = request.GetRequestStream())//定义请求流
{
//将各个二进制 安顺序写入请求流 modelIdStr -> (fileContentStr + fileContent) -> uodateTimeStr -> encryptStr
myRequestStream.Write(campaignIDStrByte, 0, campaignIDStrByte.Length);

myRequestStream.Write(fileContentStrByte, 0, fileContentStrByte.Length);

myRequestStream.Write(fileContentByte, 0, fileContentByte.Length);

myRequestStream.Write(updateTimeStrByte, 0, updateTimeStrByte.Length);

myRequestStream.Write(encryptStrByte, 0, encryptStrByte.Length);
}

try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//发送

Stream myResponseStream = response.GetResponseStream();//获取返回值

using (StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")))
{
string retString = UnicodeToString(myStreamReader.ReadToEnd());
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
}catch(Exception e)
{
Log.AppendError("上传加密文件失败"+fileName +" :"+e.Message);
return "";
}
}

private string UnicodeToString(string srcText)
{
return Regex.Unescape(srcText);
}

C#post调用接口并上传文件的更多相关文章

  1. httpclient请求接口,上传文件附加参数(.net core)

    /// <summary> /// 上传文件 - 武汉站点 /// </summary> [HttpPost] public IActionResult UploadWH(Re ...

  2. Java文件上传:Restful接口接收上传文件,缓存在本地

    接口代码 import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; i ...

  3. UEditor调用上传图片、上传文件等模块

    来源:https://www.cnblogs.com/lhm166/articles/6079973.html 说到百度富文本编辑器ueditor(下面简称ue),我不得不给它一个大大的赞.我们在网站 ...

  4. 使用RestTemplate调用接口上传文件

    场景 接口接受一个文件,缓存在本地,验证文件的完整性及内容,然后将文件上传至云服务器: 下面只写利用RestTemplate将文件上传至云服务器,至于文件上传以及缓存在本地可以参考:JAVA文件上传: ...

  5. .NET Core 如何上传文件及处理大文件上传

    当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发ASP.NET Core MVC的Controller中的A ...

  6. ASP.NET Core MVC如何上传文件及处理大文件上传

    用文件模型绑定接口:IFormFile (小文件上传) 当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发AS ...

  7. 上传文件,经过Zuul,中文文件名乱码解决办法

    转载请标明出处: http://blog.csdn.net/forezp/article/details/77170470 本文出自方志朋的博客 问题描述 在项目中又一个上传文件的oss服务,直接调用 ...

  8. 演示如何通过 web api 上传文件MVC40

    演示如何通过 web api 上传文件WebApiWebFormHost/UploadFileController.cs /* * 通过 web api 上传文件 */ using System; u ...

  9. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

随机推荐

  1. Java基础——增强for循环

    java1.5版本引入了一个增强for循环,基本原理和for循环类似. 语法声明:for(表达式:条件表达式) 举例:for (String str : set) 解释:set代表set集合,str代 ...

  2. SwipeRefreshLayout的使用,下拉刷新

    1. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android ...

  3. ng-repeat 中的 track by $index

    用ng-repeat指令遍历一个javascript数组,当数组中有重复元素的时候,angularjs会报错,这是因为ng-Repeat不允许collection中存在两个相同Id的对象. 对于数字或 ...

  4. 3ds Max制作欧式风格的墙壁路灯效果

    在这篇文章中,我将解释我创建我的形象元宵节的步骤.我只是在寻找一个很好的参考图像在互联网上的东西,我觉得我想要的模型,这个形象.我发现了一个巨大的灯笼形象,但在白天的图片拍摄.我想改变我的形象和显示的 ...

  5. ZBrush通过遮罩得到子物体

    ZBrush 中通过遮罩为模型添加子物体的方法简单且方便,我们可以通过按住Ctrl键绘制遮罩结合相关命令创建具有抽出厚度的模型提取出作为子物体附在模型表面.本文将详细介绍在Zbrush中如何通过遮罩得 ...

  6. 新物理AI将可能成为量子计算革命的关键

    新物理AI将可能成为量子计算革命的关键 据外媒报道,量子计算无疑是现在最令人兴奋的技术之一,但它的量子物理基础却让它成为了一个令人讨厌的概念理解甚至很难再展开其他事情.然而,最近物理学研究的一项突破可 ...

  7. mysql定时清理binlog

    一.没有主从同步的情况下清理日志 mysql -uroot -p123456 -e 'PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ),INTERVAL 5 DAY) ...

  8. JS 数值转换、加减乘除

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 开源Android容器化框架Atlas开发者指南

    Atlas是古希腊神话中的天神,是波士顿动力公司的机器人,借助搜索引擎,得以发现这个名词背后许许多多的含义.在手机淘宝,Atlas是一个扎根于Android客户端的一个组件化容器框架,相比神话中用手和 ...

  10. MySQL ERROR 1366(HY000) Incorrect string value

    有以下两张表: mysql> show tables; +---------------+ | Tables_in_old | +---------------+ | book | | pres ...