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); }
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); }