private long WriteSingleContent(Stream stream, IHttpContent content, Action <UploadStatusMessage> uploadStatusCallback, int blockSize, long overallContentLength, long totalContentUploadedOverall) { long contentLength = content.GetContentLength(); int contentUploadedThisRound = 0; int totalContentUploaded = 0; byte[] requestBuffer = new byte[blockSize]; Stream contentStream = content.ReadAsStream(); while (totalContentUploaded != contentLength) { contentUploadedThisRound = 0; int read = 0; while ((read = contentStream.Read(requestBuffer, read, blockSize - read)) > 0) { contentUploadedThisRound += read; } if (contentUploadedThisRound > 0) { stream.Write(requestBuffer, 0, contentUploadedThisRound); } totalContentUploaded += contentUploadedThisRound; totalContentUploadedOverall += contentUploadedThisRound; RaiseUploadStatusCallback(uploadStatusCallback, overallContentLength, contentUploadedThisRound, totalContentUploadedOverall); } return(totalContentUploaded); }
private void WriteMultipleContent(Stream stream, IHttpContent content, Action <UploadStatusMessage> uploadStatusCallback, int blockSize) { long contentLength = content.GetContentLength(); long totalContentUploaded = 0; MultipartContent multipartContent = content as MultipartContent; foreach (IHttpContent singleContent in multipartContent) { stream.Write(multipartContent.BoundaryStartBytes, 0, multipartContent.BoundaryStartBytes.Length); totalContentUploaded += multipartContent.BoundaryStartBytes.Length; foreach (var header in singleContent.Headers) { byte[] headerBytes = Encoding.UTF8.GetBytes(header.Key + ": " + header.Value); stream.Write(headerBytes, 0, headerBytes.Length); totalContentUploaded += headerBytes.Length; stream.Write(multipartContent.CRLFBytes, 0, multipartContent.CRLFBytes.Length); totalContentUploaded += multipartContent.CRLFBytes.Length; } stream.Write(multipartContent.CRLFBytes, 0, multipartContent.CRLFBytes.Length); totalContentUploaded += multipartContent.CRLFBytes.Length; totalContentUploaded += WriteSingleContent(stream, singleContent, uploadStatusCallback, blockSize, contentLength, totalContentUploaded); stream.Write(multipartContent.CRLFBytes, 0, multipartContent.CRLFBytes.Length); totalContentUploaded += multipartContent.CRLFBytes.Length; } if (!multipartContent.Any()) { stream.Write(multipartContent.BoundaryStartBytes, 0, multipartContent.BoundaryStartBytes.Length); totalContentUploaded += multipartContent.BoundaryStartBytes.Length; } stream.Write(multipartContent.BoundaryEndBytes, 0, multipartContent.BoundaryEndBytes.Length); totalContentUploaded += multipartContent.BoundaryEndBytes.Length; RaiseUploadStatusCallback(uploadStatusCallback, contentLength, (multipartContent.CRLFBytes.Length * 2) + multipartContent.BoundaryEndBytes.Length, totalContentUploaded); }
private void WriteMultipleContent(Stream stream, IHttpContent content, Action <UploadStatusMessage> uploadStatusCallback, int blockSize) { long contentLength = content.GetContentLength(); long totalContentUploaded = 0; int singleContentCount = 0; MultipartContent multipartContent = content as MultipartContent; foreach (IHttpContent singleContent in multipartContent) { byte[] contentHeader = Encoding.UTF8.GetBytes("Content-Type: " + singleContent.GetContentType()); stream.Write(multipartContent.BoundaryStartBytes, 0, multipartContent.BoundaryStartBytes.Length); totalContentUploaded += multipartContent.BoundaryStartBytes.Length; stream.Write(contentHeader, 0, contentHeader.Length); totalContentUploaded += contentHeader.Length; stream.Write(multipartContent.CRLFBytes, 0, multipartContent.CRLFBytes.Length); totalContentUploaded += multipartContent.CRLFBytes.Length; stream.Write(multipartContent.CRLFBytes, 0, multipartContent.CRLFBytes.Length); totalContentUploaded += multipartContent.CRLFBytes.Length; totalContentUploaded += WriteSingleContent(stream, singleContent, uploadStatusCallback, blockSize, contentLength, totalContentUploaded); stream.Write(multipartContent.CRLFBytes, 0, multipartContent.CRLFBytes.Length); totalContentUploaded += multipartContent.CRLFBytes.Length; singleContentCount++; } if (singleContentCount == 0) { stream.Write(multipartContent.BoundaryStartBytes, 0, multipartContent.BoundaryStartBytes.Length); totalContentUploaded += multipartContent.BoundaryStartBytes.Length; } stream.Write(multipartContent.BoundaryEndBytes, 0, multipartContent.BoundaryEndBytes.Length); totalContentUploaded += multipartContent.BoundaryEndBytes.Length; RaiseUploadStatusCallback(uploadStatusCallback, contentLength, (multipartContent.CRLFBytes.Length * 2) + multipartContent.BoundaryEndBytes.Length, totalContentUploaded); }
protected void HandleRequestWrite(IHttpContent content, Action <UploadStatusMessage> uploadStatusCallback, int blockSize) { using (Stream stream = _request.GetRequestStream()) { if (content.ContentReadAction == ContentReadAction.Multi) { WriteMultipleContent(stream, content, uploadStatusCallback, blockSize); } else { WriteSingleContent(stream, content, uploadStatusCallback, blockSize, content.GetContentLength(), 0); } } }
protected void SetContentHeaders(IHttpContent content) { _request.ContentLength = content.GetContentLength(); _request.ContentType = content.GetContentType(); }
protected void SetContentHeaders(IHttpContent content) { _request.Headers[HttpRequestHeader.ContentLength] = content.GetContentLength().ToString(); _request.ContentType = content.GetContentType(); }