2019/10/27, .Net c#代码片段

摘要:使用HttpWebRequest向Api接口发送文件,multipart-form数据格式,POST方式

参考地址

/// <summary>
/// HttpWebRequest发送文件
/// </summary>
/// <param name="url">url</param>
/// <param name="filePath">文件路径</param>
/// <param name="paramName">文件参数名</param>
/// <param name="contentType">contentType</param>
/// <param name="nameValueCollection">其余要附带的参数键值对</param>
public static void HttpUploadFile(string url, string filePath, string paramName, string contentType, NameValueCollection nameValueCollection)
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = "POST";
request.KeepAlive = true;
request.Credentials = CredentialCache.DefaultCredentials;
Stream requestStream = request.GetRequestStream();
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
foreach (string key in nameValueCollection.Keys)
{
requestStream.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, nameValueCollection[key]);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
requestStream.Write(formitembytes, 0, formitembytes.Length);
}
requestStream.Write(boundarybytes, 0, boundarybytes.Length);
string header = string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n", paramName, filePath, contentType);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
requestStream.Write(headerbytes, 0, headerbytes.Length);
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
}
fileStream.Close();
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
requestStream.Write(trailer, 0, trailer.Length);
requestStream.Close();
WebResponse webResponse = null;
try
{
webResponse = request.GetResponse();
Stream responseStream = webResponse.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream);
string result = streamReader.ReadToEnd();
}
catch (Exception ex)
{
if (webResponse != null)
{
webResponse.Close();
webResponse = null;
}
}
finally
{
request = null;
}
}

使用

NameValueCollection nvc = new NameValueCollection();
nvc.Add("id", "1000");
nvc.Add("name", "user1");
HttpUploadFile("http://your.server.com/upload",@"C:\test\test.jpg", "file", "image/jpeg", nvc);

最新文章

  1. C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍
  2. HTML5 oninput实时监听输入框值变化的完美方案
  3. 由一个bug引发的SQLite缓存一致性探索
  4. Asp.net Web API 返回Json对象的两种方式
  5. 安装django
  6. InstallShield 下载安装
  7. poj 1195 mobile phone
  8. codevs 1993 草地排水 USACO
  9. angular 引入 component 报错
  10. EF 接收OUTPUT参数的方法 How to Retrieve Stored Procedure Output Parameters in Entity Framework
  11. UIPasteboard 粘贴板
  12. 17.java.lang.CloneNotSupportedException
  13. 【SSRS】入门篇(一) -- 创建SSRS项目
  14. 第 4 章 MySQL 安全管理
  15. WinForm中,设置不显示窗口的标题栏
  16. Programming In Scala笔记-第五章、Scala中的变量类型和操作
  17. 【FPGA学习】Verilog之加法器
  18. Python爬虫实战:使用Selenium抓取QQ空间好友说说
  19. WPF 10天修炼 第五天- 内容控件
  20. (后端)项目中的错误之java中判断字符里面含有某些字符

热门文章

  1. AMD Ryzen一代、二代CPU一览表
  2. 逆向破解之160个CrackMe —— 027
  3. 网传英特尔酷睿第十代桌面处理器(Comet Lake 14nm)规格
  4. 数据结构 - 链栈的实现 C++
  5. Python实战之ATM+购物车
  6. jenkins pipeline之stash/unstash
  7. 【电脑】E470C如何关闭触摸板
  8. clojure 环境搭建
  9. 修改了celery任务老是执行失败,跟shell中调试的结果不同
  10. 洛谷 p2055 假期的宿舍 题解