[HttpPost("file")]
public async Task<IActionResult> UploadFile([FromBody] FileUpload Upload)
{
Config.DefaultResponse response = new Config.DefaultResponse();
try
{
string siteUrl = "";
var accessTokenResult = await GetAccessToken();
if (accessTokenResult is ObjectResult accessTokenObjectResult && accessTokenObjectResult.Value is string accessToken)
{
string libraryName = "Shared Documents";
string folderPath = Upload.FolderName;
string[] folders = folderPath.Trim('/').Split('/');
var firstFolderPathSet = folders[0] + "/" + folders[1];
var firstFolderUrl = $"{siteUrl}/_api/web/getfolderbyserverrelativeurl('{libraryName}/{firstFolderPathSet}')/Exists";
var secondFolderPathSet = folders[0] + "/" + folders[1] + "/" + folders[2];
var secondFolderUrl = $"{siteUrl}/_api/web/getfolderbyserverrelativeurl('{libraryName}/{secondFolderPathSet}')/Exists";
var thirdFolderPathSet = folders[0] + "/" + folders[1] + "/" + folders[2] + "/" + folders[3];
var thirdFolderUrl = $"{siteUrl}/_api/web/getfolderbyserverrelativeurl('{libraryName}/{thirdFolderPathSet}')/Exists";
var fourthFolderPathSet = folders[0] + "/" + folders[1] + "/" + folders[2] + "/" + folders[3] + "/" + folders[4];
var fourthFolderUrl = $"{siteUrl}/_api/web/getfolderbyserverrelativeurl('{libraryName}/{fourthFolderPathSet}')/Exists";
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var checkResponse = await httpClient.GetAsync(firstFolderUrl);
if (checkResponse.IsSuccessStatusCode)
{
var responseText = await checkResponse.Content.ReadAsStringAsync();
JObject jsonResponse = JObject.Parse(responseText);
bool extractedValue = jsonResponse["value"].Value<bool>();
if (!extractedValue)
{
var createFolderUrl = $"{siteUrl}/_api/web/folders/add('{libraryName}/{firstFolderPathSet}')";
using (var createResponse = await httpClient.PostAsync(createFolderUrl, null))
{
if (!createResponse.IsSuccessStatusCode)
{
response = new Config.DefaultResponse(500,"Failed to create folder", "Failed to create folder");
return BadRequest(response);
}
}
}
}
else
{
response = new Config.DefaultResponse(500,"Failed", "Failed to check if folder exists");
return BadRequest(response);
}
}
//second folder
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var checkResponse = await httpClient.GetAsync(secondFolderUrl);
if (checkResponse.IsSuccessStatusCode)
{
var responseText = await checkResponse.Content.ReadAsStringAsync();
JObject jsonResponse = JObject.Parse(responseText);
bool extractedValue = jsonResponse["value"].Value<bool>();
if (!extractedValue)
{
var createFolderUrl = $"{siteUrl}/_api/web/folders/add('{libraryName}/{secondFolderPathSet}')";
using (var createResponse = await httpClient.PostAsync(createFolderUrl, null))
{
if (!createResponse.IsSuccessStatusCode)
{
response = new Config.DefaultResponse(500,"Failed to create folder", "Failed to create folder");
return BadRequest(response);
}
}
}
}
else
{
response = new Config.DefaultResponse(500,"Failed", "Failed to check if folder exists");
return BadRequest(response);
}
}
//third folder
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var checkResponse = await httpClient.GetAsync(thirdFolderUrl);
if (checkResponse.IsSuccessStatusCode)
{
var responseText = await checkResponse.Content.ReadAsStringAsync();
JObject jsonResponse = JObject.Parse(responseText);
bool extractedValue = jsonResponse["value"].Value<bool>();
if (!extractedValue)
{
var createFolderUrl = $"{siteUrl}/_api/web/folders/add('{libraryName}/{thirdFolderPathSet}')";
using (var createResponse = await httpClient.PostAsync(createFolderUrl, null))
{
if (!createResponse.IsSuccessStatusCode)
{
response = new Config.DefaultResponse(500,"Failed to create folder", "Failed to create folder");
return BadRequest(response);
}
}
}
}
else
{
response = new Config.DefaultResponse(500,"Failed", "Failed to check if folder exists");
return BadRequest(response);
}
}
//fourth folder
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var checkResponse = await httpClient.GetAsync(fourthFolderUrl);
if (checkResponse.IsSuccessStatusCode)
{
var responseText = await checkResponse.Content.ReadAsStringAsync();
JObject jsonResponse = JObject.Parse(responseText);
bool extractedValue = jsonResponse["value"].Value<bool>();
if (!extractedValue)
{
var createFolderUrl = $"{siteUrl}/_api/web/folders/add('{libraryName}/{fourthFolderPathSet}')";
using (var createResponse = await httpClient.PostAsync(createFolderUrl, null))
{
if (!createResponse.IsSuccessStatusCode)
{
response = new Config.DefaultResponse(500,"Failed to create folder", "Failed to create folder");
return BadRequest(response);
}
}
}
}
else
{
response = new Config.DefaultResponse(500,"Failed", "Failed to check if folder exists");
return BadRequest(response);
}
}
string fileName = Upload.FileName;
//var uploadUrl = $"{currentFolderUrl}/files/add(url='{fileName}',overwrite=true)";
var uploadUrl = $"{siteUrl}/_api/web/getfolderbyserverrelativeurl('{libraryName}{folderPath}')/files/add(overwrite=true,url='{fileName}')";
//Write filecontent to local file
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
byte[] fileBytes = Convert.FromBase64String(Upload.FileContent);
ByteArrayContent fileContent = new ByteArrayContent(fileBytes);
fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
using (var httpResponse = await httpClient.PostAsync(uploadUrl, fileContent))
{
var responseText = await httpResponse.Content.ReadAsStringAsync();
if (httpResponse.IsSuccessStatusCode)
{
var fileUrl= siteUrl + "/" + libraryName +folderPath + "/" + fileName;
var myData = new
{
Name = fileName,
fileUrl = fileUrl
};
response = new Config.DefaultResponse(200, "Success", myData);
return Ok(response);
}
else
{
response = new Config.DefaultResponse(500,"Failed to upload file", responseText);
return BadRequest(response);
}
}
}
}
else
{
return BadRequest("Failed to obtain access token");
}
}
catch (Exception ex)
{
var exceptionResponse = new Config.DefaultResponse(500,"Failed to upload file", ex.Message);
return StatusCode(500, exceptionResponse);
}
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter