Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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));
            }
        }