public async Task <MediaViewModel> UploadMedia(Guid userId, CreateMediaDTO createMediaDTO) { await DeleteUnusedMedias(userId); using var ms = new MemoryStream(); await createMediaDTO.Media.CopyToAsync(ms, new CancellationTokenSource(TimeSpan.FromSeconds(MEDIA_PROCESS_TIMEOUT)).Token); var blobName = $"media-{Guid.NewGuid()}"; ms.Position = 0; var result = await BlobStorageRepo.UploadMedia(ms, blobName, createMediaDTO.Container); var media = new Media { MediaType = createMediaDTO.Media.ContentType.ToMediaType(), MimeType = createMediaDTO.Media.ContentType, BlobName = blobName, Container = createMediaDTO.Container, FileSize = createMediaDTO.Media.Length, OwnerId = userId }; await DbContext.Medias.AddAsync(media); await DbContext.SaveChangesAsync(); var mediaViewModel = MediaViewModel.FromMedia(media); mediaViewModel.BlobFullUrl = result.AbsoluteUri; return(mediaViewModel); }
public async Task <MediaViewModel> UploadMedia(Guid userId, CreateMediaDTO createMediaDTO) { if (createMediaDTO.Media.ContentType.ToMediaType() == MediaType.Unknown) { throw new UnsupportedMediaTypeException($"Invalid file type '{createMediaDTO.Media.ContentType}'."); } if (createMediaDTO.Container == MediaContainer.Unknown) { throw new ArgumentException("Media container not found/must have a value.", nameof(createMediaDTO)); } return(await Repository.UploadMedia(userId, createMediaDTO)); }
public async Task <IActionResult> UploadMedia([FromForm] CreateMediaDTO mediaDto) { try { var user = await HttpContext.GetUser(); var result = await MediaService.UploadMedia(user.Id, mediaDto); return(CreatedAtAction(nameof(GetMedia), new { id = result.Id }, result)); } catch (Exception ex) { Logger.LogWarning(ex, "An error occured: " + ex.Message ?? "undefined"); return(ExceptionHandlerService.Handle(ex, Request)); } }