Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
 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);
         }
     }
 }
Exemple #5
0
 protected void SetContentHeaders(IHttpContent content)
 {
     _request.ContentLength = content.GetContentLength();
     _request.ContentType   = content.GetContentType();
 }
Exemple #6
0
 protected void SetContentHeaders(IHttpContent content)
 {
     _request.Headers[HttpRequestHeader.ContentLength] = content.GetContentLength().ToString();
     _request.ContentType = content.GetContentType();
 }