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