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 = null;
            Stream contentStream = null;

            if (content.ContentReadAction == ContentReadAction.Stream)
            {
                requestBuffer = new byte[blockSize];
                contentStream = content.ReadAsStream();
            }
            else
            {
                requestBuffer = content.ReadAsByteArray();
            }

            while (totalContentUploaded != contentLength)
            {
                contentUploadedThisRound = 0;

                if (content.ContentReadAction == ContentReadAction.Stream)
                {
                    int read = 0;
                    while ((read = contentStream.Read(requestBuffer, read, blockSize - read)) > 0)
                    {
                        contentUploadedThisRound += read;
                    }

                    if (contentUploadedThisRound > 0)
                    {
                        stream.Write(requestBuffer, 0, contentUploadedThisRound);
                    }
                }
                else
                {
                    contentUploadedThisRound = blockSize > (requestBuffer.Length - totalContentUploaded) ? (requestBuffer.Length - totalContentUploaded) : blockSize;

                    stream.Write(requestBuffer, totalContentUploaded, contentUploadedThisRound);
                }

                totalContentUploaded        += contentUploadedThisRound;
                totalContentUploadedOverall += contentUploadedThisRound;

                RaiseUploadStatusCallback(uploadStatusCallback, overallContentLength, contentUploadedThisRound, totalContentUploadedOverall);
            }

            return(totalContentUploaded);
        }