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