/* ============================================================================== * 功能描述:PutFlieContent * 创 建 者:Garrett * 创建日期:2019/9/16 19:24:43 * ==============================================================================*/ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace PackageUploader.Http { /// /// PutFlieContent /// class PutFlieContent : FileContent { private string m_Url; private Stream m_Stream; public PutFlieContent(string url, Stream stream) { m_Url = url; m_Stream = stream; } /// /// 上传文件 /// /// public virtual string PutContent() { var url = m_Url; var stream = m_Stream; if (stream == null) throw new ArgumentNullException(nameof(stream)); var responseValue = string.Empty; HttpWebRequest request = null; try { var totalLength = stream.Length; request = (HttpWebRequest)WebRequest.Create(url); request.KeepAlive = true; request.Timeout = Timeout; request.Method = "POST"; request.ContentLength = totalLength; request.ContentType = "multipart/form-data; "; #region 请求数据 byte[] buffer = new byte[BufferLength]; var transLength = 0; using (BinaryReader r = new BinaryReader(stream)) { Stream postStream = request.GetRequestStream(); try { int size = 0; do { size = r.Read(buffer, 0, buffer.Length); postStream.Write(buffer, 0, size); transLength += size; #region 调用事件 StreamProgressArgs args = new StreamProgressArgs(size, transLength, totalLength); args.TransCompleted = (size == (long)0); TransferProgress?.Invoke(this, args); #endregion } while (size > 0); } finally { postStream?.Close(); } } #endregion #region 相应数据 //返回数据 using (var response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode != HttpStatusCode.OK) { var message = String.Format("请求失败. 获得http状态 {0}", response.StatusCode); throw new ApplicationException(message); } using (var responseStream = response.GetResponseStream()) { if (responseStream != null) using (var reader = new StreamReader(responseStream)) { responseValue = reader.ReadToEnd(); } } } #endregion } catch (Exception e) { throw; } finally { //request?.dis } return responseValue; } } }