I’m trying to upload a big file (~500MB), 100 MB each chunk and tries with startupload, continueupload and finishupload SharePoint APIs.
The following code takes long time to execute and prints the console messages properly. But finally written 0 byte only. Not sure what i’m missing here. Any help is much appreciated. Thanks.
<code> HttpClient client = new HttpClient();
client.Timeout = TimeSpan.FromMinutes(15);
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
string fileName = Path.GetFileName(sourcePath);
string createFileRequestUrl = $"{baseURL}/_api/web/getfolderbyserverrelativeurl('{targetFolderUrl}')/files/add(url='{fileName}',overwrite=true)";
HttpResponseMessage response = await client.PostAsync(createFileRequestUrl, null);
if (response.IsSuccessStatusCode)
{
await response.Content.ReadAsStringAsync();
}
var targetUrl = Path.Combine(targetFolderUrl, fileName);
var firstChunk = true;
var uploadId = Guid.NewGuid();
var offset = 0L;
using (FileStream fileStream = File.OpenRead(sourcePath))
using (BinaryReader reader = new BinaryReader(fileStream))
{
var endpointUrl = "";
var buffer = new byte[chunkSizeBytes];
int bytesRead;
while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
{
if (firstChunk)
{
endpointUrl = $"{baseURL}/_api/web/getfilebyserverrelativeurl('{targetUrl}')/startupload(uploadId=guid'{uploadId}')";
response = await client.PostAsync(endpointUrl, new ByteArrayContent(buffer));
firstChunk = false;
}
else if (reader.BaseStream.Position == reader.BaseStream.Length)
{
endpointUrl = $"{baseURL}/_api/web/getfilebyserverrelativeurl('{targetUrl}')/finishupload(uploadId=guid'{uploadId}',fileOffset='{offset}')";
var finalBuffer = new byte[bytesRead];
Array.Copy(buffer, finalBuffer, finalBuffer.Length);
response = await client.PostAsync(endpointUrl, new ByteArrayContent(finalBuffer));
}
else
{
endpointUrl = $"{baseURL}/_api/web/getfilebyserverrelativeurl('{targetUrl}')/continueupload(uploadId=guid'{uploadId}',fileOffset='{offset}')";
response = await client.PostAsync(endpointUrl, null);
}
offset += bytesRead;
chunkUploaded(offset, reader.BaseStream.Length);
}
}
</code>
<code> HttpClient client = new HttpClient();
client.Timeout = TimeSpan.FromMinutes(15);
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
string fileName = Path.GetFileName(sourcePath);
string createFileRequestUrl = $"{baseURL}/_api/web/getfolderbyserverrelativeurl('{targetFolderUrl}')/files/add(url='{fileName}',overwrite=true)";
HttpResponseMessage response = await client.PostAsync(createFileRequestUrl, null);
if (response.IsSuccessStatusCode)
{
await response.Content.ReadAsStringAsync();
}
var targetUrl = Path.Combine(targetFolderUrl, fileName);
var firstChunk = true;
var uploadId = Guid.NewGuid();
var offset = 0L;
using (FileStream fileStream = File.OpenRead(sourcePath))
using (BinaryReader reader = new BinaryReader(fileStream))
{
var endpointUrl = "";
var buffer = new byte[chunkSizeBytes];
int bytesRead;
while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
{
if (firstChunk)
{
endpointUrl = $"{baseURL}/_api/web/getfilebyserverrelativeurl('{targetUrl}')/startupload(uploadId=guid'{uploadId}')";
response = await client.PostAsync(endpointUrl, new ByteArrayContent(buffer));
firstChunk = false;
}
else if (reader.BaseStream.Position == reader.BaseStream.Length)
{
endpointUrl = $"{baseURL}/_api/web/getfilebyserverrelativeurl('{targetUrl}')/finishupload(uploadId=guid'{uploadId}',fileOffset='{offset}')";
var finalBuffer = new byte[bytesRead];
Array.Copy(buffer, finalBuffer, finalBuffer.Length);
response = await client.PostAsync(endpointUrl, new ByteArrayContent(finalBuffer));
}
else
{
endpointUrl = $"{baseURL}/_api/web/getfilebyserverrelativeurl('{targetUrl}')/continueupload(uploadId=guid'{uploadId}',fileOffset='{offset}')";
response = await client.PostAsync(endpointUrl, null);
}
offset += bytesRead;
chunkUploaded(offset, reader.BaseStream.Length);
}
}
</code>
HttpClient client = new HttpClient();
client.Timeout = TimeSpan.FromMinutes(15);
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
string fileName = Path.GetFileName(sourcePath);
string createFileRequestUrl = $"{baseURL}/_api/web/getfolderbyserverrelativeurl('{targetFolderUrl}')/files/add(url='{fileName}',overwrite=true)";
HttpResponseMessage response = await client.PostAsync(createFileRequestUrl, null);
if (response.IsSuccessStatusCode)
{
await response.Content.ReadAsStringAsync();
}
var targetUrl = Path.Combine(targetFolderUrl, fileName);
var firstChunk = true;
var uploadId = Guid.NewGuid();
var offset = 0L;
using (FileStream fileStream = File.OpenRead(sourcePath))
using (BinaryReader reader = new BinaryReader(fileStream))
{
var endpointUrl = "";
var buffer = new byte[chunkSizeBytes];
int bytesRead;
while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
{
if (firstChunk)
{
endpointUrl = $"{baseURL}/_api/web/getfilebyserverrelativeurl('{targetUrl}')/startupload(uploadId=guid'{uploadId}')";
response = await client.PostAsync(endpointUrl, new ByteArrayContent(buffer));
firstChunk = false;
}
else if (reader.BaseStream.Position == reader.BaseStream.Length)
{
endpointUrl = $"{baseURL}/_api/web/getfilebyserverrelativeurl('{targetUrl}')/finishupload(uploadId=guid'{uploadId}',fileOffset='{offset}')";
var finalBuffer = new byte[bytesRead];
Array.Copy(buffer, finalBuffer, finalBuffer.Length);
response = await client.PostAsync(endpointUrl, new ByteArrayContent(finalBuffer));
}
else
{
endpointUrl = $"{baseURL}/_api/web/getfilebyserverrelativeurl('{targetUrl}')/continueupload(uploadId=guid'{uploadId}',fileOffset='{offset}')";
response = await client.PostAsync(endpointUrl, null);
}
offset += bytesRead;
chunkUploaded(offset, reader.BaseStream.Length);
}
}