/*-------------------------------------------------------------------------
* 功能描述: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;
using SAGA.DotNetUtils.Logger;
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)
{
BResult rslt= (BResult)string.Empty;
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
Log4Net.Debug("UploadStart");
var tt = client.PostAsync(url, content);
Log4Net.Debug("UploadEnd ");
var result = tt.Result;
Log4Net.Debug("UploadEnd "+ result.IsSuccessStatusCode);
if (result.IsSuccessStatusCode)
{
rslt = (HttpResult) result.Content.ReadAsStringAsync().Result;
}
else
{
throw new Exception(result.ToString());
}
}
catch (Exception e)
{
Log4Net.Debug("Upload Exception ");
throw new Exception(e.ToString());
}
finally
{
Log4Net.Debug("Upload finally ");
client.Dispose();
}
}
return rslt;
}
}
}