Example #1
0
        public Stream GetStreamAsync(
            MediaBlobData request)
        {
            var filename = GetFilename(request);

            return(new FileStream(filename, FileMode.Open));
        }
Example #2
0
        public Task MoveAsync(
            MediaBlobData request,
            string newLocation,
            CancellationToken cancellationToken)
        {
            var filename = GetFilename(request);

            var newPathFragments = new List <string> {
                _options.RootDirectory
            };

            newPathFragments.AddRange(newLocation.Split('/'));

            var newDir = Path.Combine(newPathFragments.ToArray());

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

            var newFilename = Path.Combine(newDir, Path.GetFileName(filename));

            File.Move(filename, newFilename, true);

            return(Task.CompletedTask);
        }
Example #3
0
        public async Task <IActionResult> GetImageAsync(Guid id, CancellationToken cancellationToken)
        {
            Media media = await _mediaService.GetByIdAsync(id, cancellationToken);

            MediaBlobData data = await _mediaService.GetMediaData(media, cancellationToken);

            return(new FileContentResult(data.Data, "image/jpg"));
        }
Example #4
0
        public async Task <MediaBlobData> GetMediaData(Media media, CancellationToken cancellationToken)
        {
            MediaBlobData blob = await _mediaBlobStore.GetAsync(
                media.ToBlobDataRequest(),
                cancellationToken);

            return(blob);
        }
Example #5
0
        public async Task <MediaStream> GetVideoAsync(Guid id, CancellationToken cancellationToken)
        {
            Media?video = await _mediaStore.GetByIdAsync(id, cancellationToken);

            MediaBlobData request = _mediaService.GetBlobRequest(
                video,
                MediaFileType.Video720);

            Stream stream = _mediaStore.Blob.GetStreamAsync(request);

            return(new MediaStream(stream, video.Filename.Split('.').Last()));
        }
Example #6
0
        public MediaStream GetVideoPreview(Guid id, CancellationToken cancellationToken)
        {
            MediaBlobData request = _mediaService.GetBlobRequest(
                new Media {
                Id = id
            },
                MediaFileType.VideoGif);

            Stream stream = _mediaStore.Blob.GetStreamAsync(request);

            return(new MediaStream(stream, "image/gif"));
        }
Example #7
0
        public async Task StoreAsync(MediaBlobData data, CancellationToken cancellationToken)
        {
            var filename = GetFilename(data);
            var file     = new FileInfo(filename);

            if (!file.Directory !.Exists)
            {
                Directory.CreateDirectory(file.Directory.FullName);
            }

            await File.WriteAllBytesAsync(filename, data.Data, cancellationToken);
        }
Example #8
0
        public async Task <MediaBlobData> GetAsync(
            MediaBlobData request,
            CancellationToken cancellationToken)
        {
            var filename = GetFilename(request);

            byte[] data = await File.ReadAllBytesAsync(filename, cancellationToken);

            return(request with {
                Data = data
            });
        }
Example #9
0
        public async Task <IActionResult> WebImageAsync(Guid id, CancellationToken cancellationToken)
        {
            MediaBlobData data = await _mediaBlobStore.GetAsync(
                new MediaBlobData
            {
                Type     = MediaBlobType.Web,
                Filename = id.ToString("N") + ".webp"
            },
                cancellationToken);

            return(new FileContentResult(data.Data, "image/webp")
            {
                EnableRangeProcessing = true
            });
        }
Example #10
0
        public Task <bool> DeleteAsync(
            MediaBlobData request,
            CancellationToken cancellationToken)
        {
            var filename = GetFilename(request);

            if (File.Exists(filename))
            {
                File.Delete(filename);
                Log.Information("Delete {File}", filename);
                return(Task.FromResult(true));
            }

            return(Task.FromResult(false));
        }
Example #11
0
        private string GetDirectory(MediaBlobData data)
        {
            var loc   = _options.BlobTypeMap[data.Type];
            var paths = new List <string>
            {
                _options.RootDirectory
            };

            paths.AddRange(loc.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries));

            if (data.Directory != null)
            {
                paths.AddRange(data.Directory.Split(
                                   new[] { '/' },
                                   StringSplitOptions.RemoveEmptyEntries));
            }

            return(Path.Combine(paths.ToArray()));
        }
Example #12
0
        public Task MoveToSpecialFolderAsync(
            MediaBlobData request,
            MediaBlobType mediaBlobType,
            CancellationToken cancellationToken)
        {
            var filname = GetFilename(request);

            var newDir = GetDirectory(new MediaBlobData
            {
                Type = mediaBlobType
            });


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

            var newFilename = Path.Combine(newDir, Path.GetFileName(filname));

            File.Move(filname, newFilename, true);

            return(Task.CompletedTask);
        }
Example #13
0
        public string GetFilename(MediaBlobData data)
        {
            string?directory = GetDirectory(data);

            return(Path.Combine(directory, data.Filename));
        }