Beispiel #1
0
        public async Task EnhanceAsync(MetadataRequest request)
        {
            var file = request.File;

            if (request.Type != MediaType.Unknown)
            {
                return;
            }

            var mimeType = file.MimeType;

            ImageInfo?imageInfo = null;

            await using (var uploadStream = file.OpenRead())
            {
                imageInfo = await assetThumbnailGenerator.GetImageInfoAsync(uploadStream, mimeType);
            }

            if (imageInfo != null)
            {
                var isSwapped = imageInfo.Orientation > ImageOrientation.TopLeft;

                if (isSwapped)
                {
                    var tempFile = TempAssetFile.Create(file);

                    await using (var uploadStream = file.OpenRead())
                    {
                        await using (var tempStream = tempFile.OpenWrite())
                        {
                            await assetThumbnailGenerator.FixOrientationAsync(uploadStream, mimeType, tempStream);
                        }
                    }

                    await using (var tempStream = tempFile.OpenRead())
                    {
                        imageInfo = await assetThumbnailGenerator.GetImageInfoAsync(tempStream, mimeType) ?? imageInfo;
                    }

                    await file.DisposeAsync();

                    request.File = tempFile;
                }
            }

            if (imageInfo != null)
            {
                request.Type = MediaType.Image;

                request.Metadata.SetPixelWidth(imageInfo.PixelWidth);
                request.Metadata.SetPixelHeight(imageInfo.PixelHeight);
            }
        }
Beispiel #2
0
        public IEnumerable <string> Format(MetadataRequest request)
        {
            if (request.Type == MediaType.Image)
            {
                var w = request.Metadata.GetPixelWidth();
                var h = request.Metadata.GetPixelHeight();

                if (w != null && h != null)
                {
                    yield return($"{w}x{h}px");
                }
            }
        }
Beispiel #3
0
        public async Task <Media> UploadAsync(string appId, AssetFile file,
                                              CancellationToken ct = default)
        {
            Guard.NotNullOrEmpty(appId);
            Guard.NotNull(file);

            var now = clock.GetCurrentInstant();

            var request = new MetadataRequest
            {
                File = file
            };

            foreach (var metadataSource in mediaMetadataSources)
            {
                await metadataSource.EnhanceAsync(request);
            }

            var infos = new List <string>();

            foreach (var metadataSource in mediaMetadataSources)
            {
                infos.AddRange(metadataSource.Format(request));
            }

            var fileInfo = string.Join(", ", infos);

            var media = new Media(appId, file.FileName, now)
            {
                FileInfo   = fileInfo,
                FileSize   = file.FileSize,
                LastUpdate = now,
                Metadata   = request.Metadata,
                MimeType   = file.MimeType,
                Type       = request.Type
            };

            await using (var stream = request.File.OpenRead())
            {
                await mediaFileStore.UploadAsync(appId, media, stream, ct);
            }

            await mediaRepository.UpsertAsync(media, ct);

            return(media);
        }