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; } } }