Search code examples
c#asp.net-core-webapiumbraco

Umbraco Image upload to Media folder in ASP.NET Core Web API


I am trying to upload the image to media folder under a folder which we are receiving the file from frontend in ASP.NET Core Web API. I am using Umbraco 3.2.2 version.

When I am trying like below its throwing that file container is not exists:

[HttpPost("/agents/logo-upload")]
public async Task<IActionResult> UploadImage([FromForm]IFormFile file)
{
    if (file == null || file.Length == 0)
    {
        return BadRequest("No file uploaded.");
    }

    try
    {
        // 1. Generate a unique file name and save it to the media folder
        var folderName = _authenticationService.GetAgent().Agency.Name;
        folderName = folderName.Trim().Replace(" ","").ToLower();

        var fileName = Path.GetFileName(file.FileName);
        var filePath = Path.Combine("media", folderName, fileName);  // Replace with your media folder path


        var existingFolder = _mediaService.GetRootMedia().FirstOrDefault(m => m.Name.InvariantEquals(folderName));

        if (existingFolder == null)
        {
            var newFolder = _mediaService.CreateMedia(folderName, Constants.System.Root, "Folder");
            _mediaService.Save(newFolder);
            existingFolder = newFolder;
        }

        var directoryPath = Path.GetDirectoryName(filePath);

        if (!Directory.Exists(directoryPath))
        {
            Directory.CreateDirectory(directoryPath);
        }

        using (var fileStream = new FileStream(filePath, FileMode.Create))
        {
            await file.CopyToAsync(fileStream);
        }

        IMedia media = null;

        using (var stream = System.IO.File.OpenRead(filePath))
        {
            media = _mediaService.CreateMedia(fileName, existingFolder.Id, Constants.Conventions.MediaTypes.Image);

            media.SetValue(_mediaFileManager, _mediaUrlGeneratorCollection, _shortStringHelper, _contentTypeBaseServiceProvider, Constants.Conventions.Media.File, fileName, stream);
            _mediaService.Save(media); // throwing the error here
        }

        return Ok(new { MediaId = media.Id, FilePath = filePath });
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Error while uploading image.");
        return StatusCode(500, "Internal server error");
    }
}

Is it not possible to upload the image to Umbraco backoffice media folder?

enter image description here


Solution

  • This is because of local azure emulator doesnt have data. Issue have been fixed when I added all the folders in local azure storage.