Yesterday I introduced ImageSharp.Web as a solution to integrate image processing capabilities into your ASP.NET Core application
One of the building blocks I talked about where 'Image Providers'. Out-of-the-box there are 3 image providers available:
- PhysicalFileSystemProvider: Loads files from the ‘wwwroot’ folder
- AzureBlobStorageImageProvider: Loads files from Azure Blob Storage
- AWSS3StorageImageProvider: Loads files from AWS S3 Storage
If you want to load files from a different source, you should create your own implementation of the IImageProvider interface.
The images in our application were stored inside the database.
Here are the steps we took to create own implementation.
Implement the IImageProvider interface
First we need to create an implementation of the IImageProvder interface. In this implementation we check if the incoming request can be handled by our Image Provider through the IsMatch property and if so we fetch the data from the database through the GetAsync() method:
Remark: this is a simplified version of our real implementation as we have to add proper error handling when the request URI is not correct.
Implement the IImageResolver interface
We also need to implement the IImageResolver interface. This is used to load the data as a stream and get the necessary metadata:
Update the configuration to use our own provider
As a last step we need to update the middleware configuration and replace the built-in ImageProvider with our own implementation: