http_helper_upload.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net;
  7. using System.IO;
  8. using System.Collections.Specialized;
  9. namespace HXX.Scanner.Biz
  10. {
  11. /// <summary>
  12. /// http工具
  13. /// </summary>
  14. public partial class http_helper
  15. {
  16. /// <summary>
  17. /// 同时带参数和文件的post
  18. /// </summary>
  19. /// <param name="url">url</param>
  20. /// <param name="file_list">文件路径列表</param>
  21. /// <param name="paramName">文件参数名</param>
  22. /// <param name="contentType">文件类型</param>
  23. /// <param name="nvc">普通参数列表</param>
  24. /// <returns></returns>
  25. public static string HttpUploadFile(string url, List<string> file_list, string paramName, string contentType, string token, NameValueCollection nvc)
  26. {
  27. string result = string.Empty;
  28. string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
  29. byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
  30. HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
  31. wr.ContentType = "multipart/form-data; boundary=" + boundary;
  32. wr.Method = "POST";
  33. wr.KeepAlive = true;
  34. wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
  35. wr.Headers.Add("Authorization:" + token);
  36. Stream rs = wr.GetRequestStream();
  37. string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
  38. foreach (string key in nvc.Keys)
  39. {
  40. rs.Write(boundarybytes, 0, boundarybytes.Length);
  41. string formitem = string.Format(formdataTemplate, key, nvc[key]);
  42. byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
  43. rs.Write(formitembytes, 0, formitembytes.Length);
  44. }
  45. rs.Write(boundarybytes, 0, boundarybytes.Length);
  46. foreach (var file in file_list)
  47. {
  48. //string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2};\r\naccess_token:\"{3}\"\r\n\r\n";
  49. string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\";\r\nContent-Type: {2};\"\r\nAuthorization: {3};\r\n\r\n";
  50. string header = string.Format(headerTemplate, paramName, file, contentType, token);
  51. byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
  52. rs.Write(headerbytes, 0, headerbytes.Length);
  53. FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
  54. byte[] buffer = new byte[4096];
  55. int bytesRead = 0;
  56. while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
  57. {
  58. rs.Write(buffer, 0, bytesRead);
  59. }
  60. fileStream.Close();
  61. byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
  62. rs.Write(trailer, 0, trailer.Length);
  63. }
  64. rs.Close();
  65. WebResponse wresp = null;
  66. try
  67. {
  68. wresp = wr.GetResponse();
  69. Stream stream2 = wresp.GetResponseStream();
  70. StreamReader reader2 = new StreamReader(stream2);
  71. result = reader2.ReadToEnd();
  72. }
  73. catch (Exception ee)
  74. {
  75. string msg = ee.Message + Environment.NewLine + Environment.NewLine;
  76. msg += "URL:" + url + Environment.NewLine + "Method:POST" + Environment.NewLine +
  77. "Content:" + "" + Environment.NewLine;
  78. System.Net.WebException webEE = ee as System.Net.WebException;
  79. if (webEE != null && webEE.Response != null)
  80. {
  81. using (System.IO.Stream st = webEE.Response.GetResponseStream())
  82. {
  83. using (System.IO.StreamReader sr = new System.IO.StreamReader(st, Encoding.UTF8))
  84. {
  85. string webmsg = sr.ReadToEnd();
  86. msg += Environment.NewLine + Environment.NewLine + webmsg;
  87. }
  88. }
  89. }
  90. throw new Exception(msg);
  91. }
  92. finally
  93. {
  94. wr = null;
  95. }
  96. return result;
  97. }
  98. /// <summary>
  99. /// 同时带参数和文件的post
  100. /// </summary>
  101. /// <param name="url">url</param>
  102. /// <param name="file_list">文件路径列表</param>
  103. /// <param name="paramName">文件参数名</param>
  104. /// <param name="contentType">文件类型</param>
  105. /// <param name="nvc">普通参数列表</param>
  106. /// <returns></returns>
  107. public static string HttpUploadFile2(string url, List<string> file_list, string paramName, string contentType, string token, NameValueCollection nvc)
  108. {
  109. string result = string.Empty;
  110. string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
  111. byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
  112. HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
  113. wr.ContentType = "multipart/form-data; boundary=" + boundary;
  114. wr.Method = "POST";
  115. wr.KeepAlive = true;
  116. wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
  117. wr.Headers.Add("Authorization:" + token);
  118. Stream rs = wr.GetRequestStream();
  119. string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
  120. foreach (string key in nvc.Keys)
  121. {
  122. rs.Write(boundarybytes, 0, boundarybytes.Length);
  123. string formitem = string.Format(formdataTemplate, key, nvc[key]);
  124. byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
  125. rs.Write(formitembytes, 0, formitembytes.Length);
  126. }
  127. foreach (var file in file_list)
  128. {
  129. rs.Write(boundarybytes, 0, boundarybytes.Length);
  130. string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n\r\n";
  131. string header = string.Format(headerTemplate, paramName, file);
  132. byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
  133. rs.Write(headerbytes, 0, headerbytes.Length);
  134. FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
  135. byte[] buffer = new byte[4096];
  136. int bytesRead = 0;
  137. while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
  138. {
  139. rs.Write(buffer, 0, bytesRead);
  140. }
  141. fileStream.Close();
  142. }
  143. byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
  144. rs.Write(trailer, 0, trailer.Length);
  145. rs.Close();
  146. WebResponse wresp = null;
  147. try
  148. {
  149. wresp = wr.GetResponse();
  150. Stream stream2 = wresp.GetResponseStream();
  151. StreamReader reader2 = new StreamReader(stream2);
  152. result = reader2.ReadToEnd();
  153. }
  154. catch (Exception ee)
  155. {
  156. string msg = ee.Message + Environment.NewLine + Environment.NewLine;
  157. msg += "URL:" + url + Environment.NewLine + "Method:POST" + Environment.NewLine +
  158. "Content:" + "" + Environment.NewLine;
  159. System.Net.WebException webEE = ee as System.Net.WebException;
  160. if (webEE != null && webEE.Response != null)
  161. {
  162. using (System.IO.Stream st = webEE.Response.GetResponseStream())
  163. {
  164. using (System.IO.StreamReader sr = new System.IO.StreamReader(st, Encoding.UTF8))
  165. {
  166. string webmsg = sr.ReadToEnd();
  167. msg += Environment.NewLine + Environment.NewLine + webmsg;
  168. }
  169. }
  170. }
  171. throw new Exception(msg);
  172. }
  173. finally
  174. {
  175. wr = null;
  176. }
  177. return result;
  178. }
  179. }
  180. }