1.对照Fiddler Post图片的方式,例如上传2张图片在fiddler中是这样的格式
---------------------------acebdf13572468
Content-Disposition: form-data; name="file"; filename="Chrysanthemum.jpg"
Content-Type: application/octet-stream
<@INCLUDE *C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg*@>
---------------------------acebdf13572468
Content-Disposition: form-data; name="file"; filename="Desert.jpg"
Content-Type: application/octet-stream
<@INCLUDE *C:\Users\Public\Pictures\Sample Pictures\Desert.jpg*@>
---------------------------acebdf13572468--
2.使用HttpWebRequest实现
var files = HttpContext.Request.Files; //从前端接收到的文件集合
Uri _uri = new Uri(“请求地址”); //创建请求地址
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(_uri); //创建请求对象
ASCIIEncoding encoding = new ASCIIEncoding(); //初始化编码对象
string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
request.Method = "POST"; //请求方式为Post类型
request.ContentType = "multipart/form-data;boundary=" + boundary; //请求类型 对照fiddler Content-Type: multipart/form-data; boundary=----------acebdf13572468
byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n"); //仿照上面的fiddler格式建立最后一个分割线
Stream requestStream = request.GetRequestStream(); //创建即将post给对方的请求流
Stream fileStream = null;
for (int i = 0; i < files.Count; i++) //遍历文件集合
{
HttpPostedFileBase file = files[i]; //获取当前文件对象
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append("file");
sb.Append("\"; filename=\"");
sb.Append(file.FileName);
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append("application/octet-stream");
sb.Append("\r\n");
sb.Append("\r\n");
//上面拼出了对应的fidder格式的头即对应fiddler的下面内容
//---------------------------acebdf13572468
//Content-Disposition: form-data; name="file"; filename="Chrysanthemum.jpg"
//Content-Type: application/octet-stream
string strPostHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); //把头部转为数据流放入到请求流中去
fileStream = file.InputStream;
byte[] fileByte = new byte[fileStream.Length];
fileStream.Read(fileByte, 0, (int)fileStream.Length);
requestStream.Write(fileByte, 0, fileByte.Length); // 将文件流转为数据流放入到请求流中去,这部分对应fiddler中的
//<@INCLUDE *C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg*@>
byte[] temp = Encoding.UTF8.GetBytes("\r\n");
requestStream.Write(temp, 0, temp.Length); //结尾加了一个换行\r\n的目的是因为确保下一个分割线另起一行,这个分隔符一定要换行展示不然会报错
file.InputStream.Close(); //参照fiddler的布局
}
requestStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length); //结尾加上结束分隔符对应fiddler的---acebdf13572468--
requestStream.Close();
HttpWebResponse _response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(_response.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();