private static bool TryParseUploadedFileMetadata(
            IFormFile file,
            string rawFileType,
            string rawImageSize,
            out IUploadedFileMetadata uploadedFileMetadata,
            out string error)
        {
            uploadedFileMetadata = null;
            error = null;

            if (string.IsNullOrEmpty(rawFileType))
            {
                uploadedFileMetadata = new GenericUploadedFileMetadata(file.FileName, file.ContentType, file.Length);
                return(true);
            }

            if (!Enum.TryParse <FileType>(rawFileType, true, out var fileType))
            {
                error = $"Cannot parse '{Http.HeaderNames.AmsFileType}' header value '{fileType}'";
                return(false);
            }

            switch (fileType)
            {
            case FileType.SizeSpecificBitmapImage:
                if (!ImageSize.TryParse(rawImageSize, out var imageSize))
                {
                    error = $"Cannot parse '{Http.HeaderNames.AmsImageSize}' header value '{rawImageSize}'";
                    return(false);
                }

                uploadedFileMetadata = new UploadedImageMetadata(file.FileName, file.ContentType, file.Length, imageSize);
                return(true);

            default:
                error = $"Unexpected '{Http.HeaderNames.AmsFileType}' header value '{fileType}'";
                return(false);
            }
        }
        private async Task <IReadOnlyDictionary <int, IReadOnlyCollection <BinaryValidationError> > > VerifyObjectBinaryElementsConsistency(
            Language language,
            IReadOnlyCollection <IObjectElementDescriptor> elements)
        {
            var errors = new Dictionary <int, IReadOnlyCollection <BinaryValidationError> >();

            foreach (var binaryElement in elements.GetBinaryElements())
            {
                var elementErrors = new List <BinaryValidationError>();
                var constraints   = binaryElement.Constraints.For(language);
                var fileKeys      = binaryElement.Value.ExtractFileKeys();
                foreach (var fileKey in fileKeys)
                {
                    using (var getResponse = await _s3Client.GetObjectAsync(_filesBucketName, fileKey))
                    {
                        var memoryStream = new MemoryStream();
                        using (getResponse.ResponseStream)
                        {
                            await getResponse.ResponseStream.CopyToAsync(memoryStream);

                            memoryStream.Position = 0;
                        }

                        using (memoryStream)
                        {
                            var metadataWrapper = MetadataCollectionWrapper.For(getResponse.Metadata);
                            var fileName        = metadataWrapper.Read <string>(MetadataElement.Filename);
                            IUploadedFileMetadata binaryMetadata;
                            if (binaryElement.Value is ICompositeBitmapImageElementValue compositeBitmapImageElementValue &&
                                compositeBitmapImageElementValue.Raw != fileKey)
                            {
                                var image = compositeBitmapImageElementValue.SizeSpecificImages.First(x => x.Raw == fileKey);
                                binaryMetadata = new UploadedImageMetadata(
                                    fileName,
                                    getResponse.Headers.ContentType,
                                    getResponse.ContentLength,
                                    image.Size);
                            }
Esempio n. 3
0
        private async Task <IReadOnlyDictionary <int, IReadOnlyCollection <BinaryValidationError> > > VerifyObjectBinaryElementsConsistency(
            Language language,
            IReadOnlyCollection <IObjectElementDescriptor> elements)
        {
            var errors = new Dictionary <int, IReadOnlyCollection <BinaryValidationError> >();

            foreach (var binaryElement in elements.GetBinaryElements())
            {
                var elementErrors = new List <BinaryValidationError>();
                var constraints   = binaryElement.Constraints.For(language);
                var fileKeys      = binaryElement.Value.ExtractFileKeys();
                foreach (var fileKey in fileKeys)
                {
                    var(stream, metaData) = await _sessionStorageReader.GetBinaryData(fileKey);

                    using (stream)
                    {
                        IUploadedFileMetadata binaryMetadata;
                        if (binaryElement.Value is ICompositeBitmapImageElementValue compositeBitmapImageElementValue &&
                            compositeBitmapImageElementValue.Raw != fileKey)
                        {
                            var image = compositeBitmapImageElementValue.SizeSpecificImages.First(x => x.Raw == fileKey);
                            binaryMetadata = new UploadedImageMetadata(metaData.Filename, metaData.ContentType, metaData.FileSize, image.Size);
                        }