Ejemplo n.º 1
0
        // returns a string to use as a file claim token
        private string uploadFileIncrementally(byte[] bytes)
        {
            int chunkSize = 16000;

            onUploadStarted(bytes.Length);
            string claimToken        = wsClient.UploadFileStart(accessToken(), bytes.Length, chunkSize);
            int    numChunks         = bytes.Length / chunkSize;
            int    fragmentChunkSize = bytes.Length % chunkSize;

            if (fragmentChunkSize > 0)
            {
                numChunks += 1;
            }

            // move the full-sized chunks
            int numUploaded = 0;

            byte[] buffer = new byte[chunkSize];
            for (int i = 0; i < (numChunks - 1); i++)
            {
                Array.Copy(bytes, i * chunkSize, buffer, 0, chunkSize);
                if (wsClient.UploadFilePart(accessToken(), claimToken, i, buffer) == false)
                {
                    return(null);
                }
                numUploaded += chunkSize;
                onPartUploaded(numUploaded, bytes.Length);
            }

            // move the fragment chunk (if any)
            if (fragmentChunkSize > 0)
            {
                buffer = new byte[fragmentChunkSize];
                Array.Copy(bytes, (numChunks - 1) * chunkSize, buffer, 0, fragmentChunkSize);
                if (wsClient.UploadFilePart(accessToken(), claimToken, numChunks - 1, buffer) == false)
                {
                    return(null);
                }
                numUploaded += fragmentChunkSize;
                onPartUploaded(numUploaded, bytes.Length);
            }

            // end the upload
            if (wsClient.UploadFileEnd(accessToken(), claimToken) == false)
            {
                return(null);
            }
            onUploadEnded(bytes.Length);

            return(claimToken);
        }