private async Task UploadFileToBlob()

in sdk/PowerBI.Api/Imports/ImportsOperations.cs [322:366]


        private async Task UploadFileToBlob(string temporaryUploadLocationUrl, Stream file, CancellationToken cancellationToken)
        {
            const int maxBlockSize = 4 * MB;

            var blockIds = new List<string>();
            var buffer = new byte[maxBlockSize];
            int i = 1;

            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("x-ms-version", "2015-04-05");
                var baseUploadUrl = temporaryUploadLocationUrl + "&comp=block&blockid=";
                var headers = new Dictionary<string,string>();
                headers.Add("x-ms-blob-type", "BlockBlob");
                do
                {
                    var plainTextBytes = System.Text.Encoding.UTF8.GetBytes("block-" + i.ToString("000000"));
                    var blockId = Convert.ToBase64String(plainTextBytes);
                    var bytesRead = await file.ReadAsync(buffer, 0, maxBlockSize);

                    var uploadBlockUrl = baseUploadUrl + blockId;
                    var content = new ByteArrayContent(buffer, 0, bytesRead);
                    await SendRequest(httpClient, HttpMethod.Put, uploadBlockUrl, headers, content, HttpStatusCode.Created, cancellationToken);

                    blockIds.Add(blockId);
                    i++;
                }
                while (file.Length - file.Position > 0);

                var blockList = new BlockList { BlockIds = blockIds };

                XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
                xsn.Add(String.Empty, String.Empty);

                XmlSerializer serializer = new XmlSerializer(typeof(BlockList));
                UTF8StringWriter myWriter = new UTF8StringWriter();
                serializer.Serialize(myWriter, blockList, xsn);
                var requestBody = myWriter.ToString();

                headers.Clear();
                headers.Add("x-ms-blob-content-type", "application/x-zip-compressed");
                var uploadBlocListkUrl = temporaryUploadLocationUrl + "&comp=blocklist";
                await SendRequest(httpClient, HttpMethod.Put, uploadBlocListkUrl, headers, new StringContent(requestBody), HttpStatusCode.Created, cancellationToken);
            }
        }