.net4.0 调用API(form-data)上传文件及传参

/// <summary>

///

/// </summary>

/// <param name="url">API URL</param>

/// <param name="token">API token</param>

/// <param name="parameters">API参数(除文件类型外)</param>

/// <param name="fileContent">文件参数(二进制文件流)</param>

/// <param name="fileName">文件名</param>

/// <returns></returns>

public string Post_formdata(string url, string token, Dictionary<string, string> parameters, byte[] fileContent, string fileName)

{

string result = "";

string strBoundary = "--" + DateTime.Now.Ticks.ToString("x");//程序生成

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "POST";

if (!string.IsNullOrEmpty(token))

{

WebHeaderCollection coll = new WebHeaderCollection();

coll.Add("token", token);

request.Headers = coll;

}

request.ContentType = "multipart/form-data;charset=UTF-8; boundary=" + strBoundary;

// 设置请求参数

StringBuilder sb = new StringBuilder();

foreach (KeyValuePair<string, string> kvp in parameters)

{

sb.AppendFormat("--" + strBoundary + "\r\n");

sb.AppendFormat("Content-Disposition: form-data; name=\"{0}\"\r\n", kvp.Key);

sb.AppendFormat("\r\n{0}\r\n", kvp.Value);

}

// 上传文件

sb.AppendFormat("--" + strBoundary + "\r\n");

sb.AppendFormat("Content-Disposition: form-data; name=\"uploadFile\"; filename=\"{0}\"\r\n", fileName); //uploadFile为参数名

//sb.AppendFormat("Content-Type: image/png\r\n");

sb.AppendFormat("Content-Type: octet-stream\r\n");

sb.AppendFormat("\r\n");

byte[] paramBytes= Encoding.UTF8.GetBytes(sb.ToString());

var footerBytes = Encoding.UTF8.GetBytes("\r\n--" + strBoundary + "--\r\n");

byte[] fileBytes = fileContent;

request.ContentLength += fileBytes.Length + paramBytes.Length + footerBytes.Length + 1;

using (Stream requestStream = request.GetRequestStream())

{

requestStream.Write(paramBytes, 0, paramBytes.Length);

requestStream.Write(fileBytes, 0, fileBytes.Length);

requestStream.Write(footerBytes, 0, footerBytes.Length);

}

HttpWebResponse resp;

try

{

resp = (HttpWebResponse)request.GetResponse();

}

catch (WebException ex)

{

resp = (HttpWebResponse)ex.Response;

}

Stream stream = resp.GetResponseStream();

//获取响应内容

using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))

{

result = reader.ReadToEnd();

}

resp.Close();

request.Abort();

return result;

}

相关推荐
froginwe111 分钟前
MongoDB 查询分析
开发语言
LateFrames33 分钟前
C# 中,0.1 在什么情况下不等于 0.1 ?
开发语言·c#
froginwe1135 分钟前
SciPy 图结构
开发语言
Larry_Yanan1 小时前
QML学习笔记(五十二)QML与C++交互:数据转换——时间和日期
开发语言·c++·笔记·qt·学习·ui·交互
歪歪1001 小时前
详细介绍一下“集中同步+分布式入库”方案的具体实现步骤
开发语言·前端·分布式·后端·信息可视化
yaoxin5211231 小时前
229. Java 集合 - 操作集合中的多个元素(批量操作)
java·开发语言·python
在人间负债^1 小时前
从Python到仓颉:核心项目内容迁移实践
开发语言·python·鸿蒙·仓颉
HSJ01701 小时前
Aviator中使用BigDecimal进行高精度计算
java·开发语言·bigdecimal·aviator
weixin_307779131 小时前
利用 AWS Lambda 与 EventBridge 优化低频 Java 作业的云计算成本
java·开发语言·云原生·云计算·aws
CheungChunChiu2 小时前
从 Rust 到 Flutter:嵌入式图形与构建工具全景指南
开发语言·flutter·rust