/*------------------------------------------------------------------------- * 功能描述:HttpUtils * 作者:xulisong * 创建时间: 2019/7/29 10:16:56 * 版本号:v1.0 * -------------------------------------------------------------------------*/ using System; using System.Diagnostics; using System.IO; using System.Net.Http; using MBIRevitBase.Result; namespace MBIRevitBase.Tools { /// /// HttpUtils信息处理 /// public class HttpUtils { private static HttpClient m_Client; /// /// 创建HttpClient,单例对象生成 /// /// public static HttpClient CreateClient() { //if (m_Client == null) { m_Client = new HttpClient(); } return m_Client; } public const string WebKitFormBoundary = "----WebKitFormBoundary"; public static BResult PostFormDataFile(string url, Stream stream) { using (HttpClient client = CreateClient()) { string boundary = string.Format("{0}{1}", WebKitFormBoundary, DateTime.Now.Ticks.ToString("x")); MultipartFormDataContent content = new MultipartFormDataContent(boundary); #region Stream请求 var streamContent = new StreamContent(stream); //"file.zip"必须有,它的格式可能影响到内部的一些配置 content.Add(streamContent, "file", "file.zip"); #endregion var result = client.PostAsync(url, content).Result; try { if (result.IsSuccessStatusCode) { string rslt = result.Content.ReadAsStringAsync().Result; return new BResult(true, rslt); } else { return result.ToString(); } } finally { client.Dispose(); } } return string.Empty; } /// /// 上传失败抛出异常,进行重试 /// /// /// /// public static BResult PostFormDataFileThrowException(string url, Stream stream) { using (HttpClient client = CreateClient()) { try { //超时时间设置为30分钟 client.Timeout = new TimeSpan(0, 30, 0); string boundary = string.Format("{0}{1}", WebKitFormBoundary, DateTime.Now.Ticks.ToString("x")); MultipartFormDataContent content = new MultipartFormDataContent(boundary); #region Stream请求 var streamContent = new StreamContent(stream); //"file.zip"必须有,它的格式可能影响到内部的一些配置 content.Add(streamContent, "file", "file.zip"); #endregion var tt = client.PostAsync(url, content); var result = tt.Result; if (result.IsSuccessStatusCode) { string rslt = result.Content.ReadAsStringAsync().Result; return ((HttpResult)rslt); } else { throw new Exception(result.ToString()); } } finally { client.Dispose(); } } return string.Empty; } } }