using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Collections.Specialized;
namespace HXX.Scanner.Biz
{
///
/// http工具
///
public partial class http_helper
{
///
/// 同时带参数和文件的post
///
/// url
/// 文件路径列表
/// 文件参数名
/// 文件类型
/// 普通参数列表
///
public static string HttpUploadFile(string url, List file_list, string paramName, string contentType, string token, NameValueCollection nvc)
{
string result = string.Empty;
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.ContentType = "multipart/form-data; boundary=" + boundary;
wr.Method = "POST";
wr.KeepAlive = true;
wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
wr.Headers.Add("Authorization:" + token);
Stream rs = wr.GetRequestStream();
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
foreach (string key in nvc.Keys)
{
rs.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, nvc[key]);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
rs.Write(formitembytes, 0, formitembytes.Length);
}
rs.Write(boundarybytes, 0, boundarybytes.Length);
foreach (var file in file_list)
{
//string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2};\r\naccess_token:\"{3}\"\r\n\r\n";
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\";\r\nContent-Type: {2};\"\r\nAuthorization: {3};\r\n\r\n";
string header = string.Format(headerTemplate, paramName, file, contentType, token);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
rs.Write(headerbytes, 0, headerbytes.Length);
FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
rs.Write(buffer, 0, bytesRead);
}
fileStream.Close();
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
rs.Write(trailer, 0, trailer.Length);
}
rs.Close();
WebResponse wresp = null;
try
{
wresp = wr.GetResponse();
Stream stream2 = wresp.GetResponseStream();
StreamReader reader2 = new StreamReader(stream2);
result = reader2.ReadToEnd();
}
catch (Exception ee)
{
string msg = ee.Message + Environment.NewLine + Environment.NewLine;
msg += "URL:" + url + Environment.NewLine + "Method:POST" + Environment.NewLine +
"Content:" + "" + Environment.NewLine;
System.Net.WebException webEE = ee as System.Net.WebException;
if (webEE != null && webEE.Response != null)
{
using (System.IO.Stream st = webEE.Response.GetResponseStream())
{
using (System.IO.StreamReader sr = new System.IO.StreamReader(st, Encoding.UTF8))
{
string webmsg = sr.ReadToEnd();
msg += Environment.NewLine + Environment.NewLine + webmsg;
}
}
}
throw new Exception(msg);
}
finally
{
wr = null;
}
return result;
}
///
/// 同时带参数和文件的post
///
/// url
/// 文件路径列表
/// 文件参数名
/// 文件类型
/// 普通参数列表
///
public static string HttpUploadFile2(string url, List file_list, string paramName, string contentType, string token, NameValueCollection nvc)
{
string result = string.Empty;
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.ContentType = "multipart/form-data; boundary=" + boundary;
wr.Method = "POST";
wr.KeepAlive = true;
wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
wr.Headers.Add("Authorization:" + token);
Stream rs = wr.GetRequestStream();
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
foreach (string key in nvc.Keys)
{
rs.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, nvc[key]);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
rs.Write(formitembytes, 0, formitembytes.Length);
}
foreach (var file in file_list)
{
rs.Write(boundarybytes, 0, boundarybytes.Length);
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n\r\n";
string header = string.Format(headerTemplate, paramName, file);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
rs.Write(headerbytes, 0, headerbytes.Length);
FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
rs.Write(buffer, 0, bytesRead);
}
fileStream.Close();
}
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
rs.Write(trailer, 0, trailer.Length);
rs.Close();
WebResponse wresp = null;
try
{
wresp = wr.GetResponse();
Stream stream2 = wresp.GetResponseStream();
StreamReader reader2 = new StreamReader(stream2);
result = reader2.ReadToEnd();
}
catch (Exception ee)
{
string msg = ee.Message + Environment.NewLine + Environment.NewLine;
msg += "URL:" + url + Environment.NewLine + "Method:POST" + Environment.NewLine +
"Content:" + "" + Environment.NewLine;
System.Net.WebException webEE = ee as System.Net.WebException;
if (webEE != null && webEE.Response != null)
{
using (System.IO.Stream st = webEE.Response.GetResponseStream())
{
using (System.IO.StreamReader sr = new System.IO.StreamReader(st, Encoding.UTF8))
{
string webmsg = sr.ReadToEnd();
msg += Environment.NewLine + Environment.NewLine + webmsg;
}
}
}
throw new Exception(msg);
}
finally
{
wr = null;
}
return result;
}
}
}