public async Task <ImageUploadResultDto> UploadImageAsync(int id, IFormFile file) { var contact = await GetById(id); var currentPublicId = contact.PublicId; var account = new Account(); _configuration.Bind("CloudinaryAccount", account); var cloudinary = new Cloudinary(account); if (file.Length <= 0) { throw new RestException(HttpStatusCode.BadRequest, "Invalid file."); } await using var stream = file.OpenReadStream(); var param = new ImageUploadParams { File = new FileDescription(file.FileName, stream), Transformation = new Transformation().Height(500).Width(500).Gravity("face").Crop("fill") }; var result = await cloudinary.UploadAsync(param); if (result == null || result.Error != null) { var message = result == null ? "Error while uploading the image." : result.Error.Message; throw new RestException(HttpStatusCode.BadRequest, message); } contact.ImageUrl = result.SecureUrl.AbsoluteUri; contact.PublicId = result.PublicId; await Context.SaveChangesAsync(); await _messageHub.SendImageUploadMessageAsync(new ImageUploadEventMessageDto { ContactId = id }); if (currentPublicId != null) { var deleteParam = new DeletionParams(currentPublicId); await cloudinary.DestroyAsync(deleteParam); } return(new ImageUploadResultDto { PublicId = contact.PublicId, ImageUrl = contact.ImageUrl }); }