If your storage provider is S3-compatible, i.e., it can be interfaced with using the S3 API and specification, you can seamlessly integrate your storage buckets with your ImageKit account. Suppose your images are originally stored on S3-compatible storage like Digital Ocean Spaces or Wasabi. In that case, you can add the bucket on which your images reside as an origin in your ImageKit configuration.
Most of the following procedure is identical to adding your own vanilla Amazon S3 bucket as an origin. All of the options and inputs remain the same, except for the new endpoint input parameter. By default, the AWS SDK will try to access your specified bucket at standard, region-based S3 endpoints. However, when you are using a third party S3 compatible storage provider such as Wasabi, you need to specify the custom endpoint corresponding to your storage provider. Learn more.
For instance, here's an example endpoint for Wasabi storage:
https://s3.wasabisys.com found on 'What are the service URLs for Wasabi's different regions?'. You can similarly find the appropriate endpoint for your S3 compatible storage provider in their documentation.
Note: We do not start copying images from your bucket as soon as you add it. Instead, we will fetch the particular image when you request it through ImageKit.io URL-endpoint. Learn more to understand how this works. The images accessed from this origin will not appear in your Media library.
Go to the external storage section in your ImageKit.io dashboard, and under the Origins section, click on the "Add origin" button.
Choose S3 Compatible Storages from the origin type dropdown.
Give your origin a name, it will appear in the list of origins you have added. For example - Wasabi - Product images bucket.
Fill out the S3 bucket name.
Specify the S3 bucket folder in which your images are present. If you have to access files at the root (i.e., present directly in the bucket and not inside a folder), enter
Fill out S3 access and secret keys. These keys should provide read-only access to ImageKit.io as explained below.
Enter the custom endpoint for your storage provider as explained above.
Leave the advanced options as it is for now.
Click on the Submit button.
When you add your first origin in the dashboard, the origin is by default made accessible through the default URL-endpoint of your ImageKit.io account. For subsequent origins, you can either create a separate URL-endpoint or edit the existing URL-endpoint (including default) and make this newly added origin accessible by editing the origin preference list.
Let's look at a few examples to fetch the images:
Original image through S3 bucket (old URL) https://example.com/rest-of-the-path.jpg
The same master image using ImageKit.io URL-endpoint https://ik.imagekit.io/your_imagekit_id/rest-of-the-path.jpg
Resized 300x300 image
So when you request
https://ik.imagekit.io/your_imagekit_id/rest-of-the-path.jpg, ImageKit.io internally access the object at path
rest-of-the-path.jpg in your bucket.
URL-endpoint transformation image path┌─────────────────────────────────────┐┌─────────────┐┌───────────────────┐https://ik.imagekit.io/your_imagekit_id/tr:w-300,h-300/rest-of-the-path.jpg
Now start using ImageKit.io URL endpoint in your application to accelerate image loading.
Quickly get started with our SDKs:
Learn about real-time image resizing:
While fetching images from your S3 bucket with special characters in the name, you will get a
404 NOT FOUND response. For example, let’s assume that there is a key
image%2Bexample.jpg in your S3 bucket, and the request is made using
image+example.jpg in the URL. In this case, ImageKit.io tries to fetch
image+example.jpg object from the S3 bucket resulting in a 404 error as this object does not exist.
While adding the origin in your ImageKit.io account, you are now provided with an option to encode the keys while fetching the object from your S3 bucket. By default, this option is disabled. When enabled, the requests made while fetching images will be made using encoded keys.
When enabled, the image response contains a Link header with the appropriate URL and rel=canonical. You will have to specify the base URL for the canonical header.
For example, if you set
https://www.example.com as the base URL for canonical header, then the image response for URL
https://ik.imagekit.io/your_imagekit_id/rest-of-the-path.jpg will have a Link header like this:
Link: <https://www.example.com/rest-of-the-path.jpg>; rel="canonical"