Example #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);
        }