How europeana/thumbnail-api works
Thumbnail API serves image thumbnails from configured object stores, falling back through ordered providers, and accepts organization-logo uploads that are resized and stored as WebP. The graph separates HTTP entry points, request processing, storage routing, and storage/image services. The README documents IBM S3, deprecated Amazon S3, and deprecated IIIF fallback; excerpts show the storage iteration, upload processing, and response utilities. Some controller and configuration links rely on SOURCE INDEX references rather than full source excerpts.
Main entry points: AbstractController.java Thumbnail retrieval · UploadImageServiceImpl.java Image processing · ThumbnailControllerV2.java Thumbnail v2 · StorageRoutes.java Storage configuration
Components 18
HTTP API
- Thumbnail v2
src/main/java/eu/europeana/thumbnail/web/ThumbnailControllerV2.java - Thumbnail v3
src/main/java/eu/europeana/thumbnail/web/ThumbnailControllerV3.java - Upload v3
src/main/java/eu/europeana/thumbnail/web/UploadControllerV3.java
Request Processing
- Thumbnail retrieval
src/main/java/eu/europeana/thumbnail/web/AbstractController.java - Response headers
src/main/java/eu/europeana/thumbnail/utils/ControllerUtils.java - Thumbnail IDs
src/main/java/eu/europeana/thumbnail/utils/IdUtils.java - Media stream
src/main/java/eu/europeana/thumbnail/model/MediaStream.java - Image sizes
src/main/java/eu/europeana/thumbnail/model/ImageSize.java
Storage Routing
- Storage selection
src/main/java/eu/europeana/thumbnail/service/StoragesService.java - Storage configuration
src/main/java/eu/europeana/thumbnail/config/StorageRoutes.java
Storage and Images
- Read contract
src/main/java/eu/europeana/thumbnail/service/MediaReadStorageService.java - S3 reader
src/main/java/eu/europeana/thumbnail/service/impl/MediaReadStorageServiceImpl.java - IIIF reader
src/main/java/eu/europeana/thumbnail/service/impl/IiifImageReadServerImpl.java - IIIF utilities
src/main/java/eu/europeana/thumbnail/utils/IiifUtils.java - Upload contract
src/main/java/eu/europeana/thumbnail/service/UploadImageService.java - Image processing
src/main/java/eu/europeana/thumbnail/service/impl/UploadImageServiceImpl.java
Other components
- API caller
- S3 object storage
Connections 27
- API caller → Thumbnail v2: requests thumbnail
src/main/java/eu/europeana/thumbnail/web/ThumbnailControllerV2.java - API caller → Thumbnail v3: requests thumbnail
src/main/java/eu/europeana/thumbnail/web/ThumbnailControllerV3.java - API caller → Upload v3: uploads image
src/main/java/eu/europeana/thumbnail/web/UploadControllerV3.java - Thumbnail v2 → Thumbnail retrieval: delegates retrieval
src/main/java/eu/europeana/thumbnail/web/ThumbnailControllerV2.java - Thumbnail v3 → Thumbnail retrieval: delegates retrieval
src/main/java/eu/europeana/thumbnail/web/ThumbnailControllerV3.java - Thumbnail retrieval → Storage selection: selects providers
src/main/java/eu/europeana/thumbnail/web/AbstractController.java - Storage selection → Storage configuration: reads routes
src/main/java/eu/europeana/thumbnail/service/StoragesService.java - Thumbnail retrieval → Read contract: retrieves in order
src/main/java/eu/europeana/thumbnail/web/AbstractController.java - Thumbnail retrieval → Thumbnail IDs: computes IDs
src/main/java/eu/europeana/thumbnail/web/AbstractController.java - Thumbnail retrieval → Response headers: checks response headers
src/main/java/eu/europeana/thumbnail/web/AbstractController.java - Thumbnail v2 → Media stream: constructs fallback icon
src/main/java/eu/europeana/thumbnail/web/ThumbnailControllerV2.java - Thumbnail v2 → Image sizes: chooses width
src/main/java/eu/europeana/thumbnail/web/ThumbnailControllerV2.java - Read contract → Media stream: returns stream
src/main/java/eu/europeana/thumbnail/service/MediaReadStorageService.java - S3 reader → Read contract: implements
src/main/java/eu/europeana/thumbnail/service/impl/MediaReadStorageServiceImpl.java - S3 reader → S3 object storage: reads objects
src/main/java/eu/europeana/thumbnail/service/impl/MediaReadStorageServiceImpl.java - S3 reader → Media stream: wraps retrieved object
src/main/java/eu/europeana/thumbnail/service/impl/MediaReadStorageServiceImpl.java - IIIF reader → Read contract: implements
src/main/java/eu/europeana/thumbnail/service/impl/IiifImageReadServerImpl.java - IIIF reader → IIIF utilities: uses utilities
src/main/java/eu/europeana/thumbnail/service/impl/IiifImageReadServerImpl.java - IIIF reader → Media stream: returns stream
src/main/java/eu/europeana/thumbnail/service/impl/IiifImageReadServerImpl.java - Storage configuration → S3 reader: creates provider
src/main/java/eu/europeana/thumbnail/config/StorageRoutes.java - Storage configuration → IIIF reader: creates provider
src/main/java/eu/europeana/thumbnail/config/StorageRoutes.java - Storage configuration → Image processing: creates upload service
src/main/java/eu/europeana/thumbnail/config/StorageRoutes.java - Upload v3 → Upload contract: dispatches upload
src/main/java/eu/europeana/thumbnail/web/UploadControllerV3.java - Image processing → Upload contract: implements
src/main/java/eu/europeana/thumbnail/service/impl/UploadImageServiceImpl.java - Image processing → Thumbnail IDs: builds object IDs
src/main/java/eu/europeana/thumbnail/service/impl/UploadImageServiceImpl.java - Image processing → Image sizes: creates size variants
src/main/java/eu/europeana/thumbnail/service/impl/UploadImageServiceImpl.java - Image processing → S3 object storage: writes variants
src/main/java/eu/europeana/thumbnail/service/impl/UploadImageServiceImpl.java