# External storages

Support for uploading transforms to external services has been structured into what's called Storages. Imager X comes with built-in support for two storages, Amazon S3 (aws) and Google Cloud Storage (gcs), and is handled through the storages and storageConfig config settings. storageConfig is an array with keys corresponding to the handle of the different storages, like so:

'storageConfig' => [
    'aws' => [
        'accessKey' => '',
        'secretAccessKey' => '',
        'region' => '',
        'bucket' => '',
        'folder' => '',
        'requestHeaders' => array(),
        'storageType' => 'standard',
        'cloudfrontInvalidateEnabled' => false,
        'cloudfrontDistributionId' => '',
    ],
    'gcs' => [
        'keyFile' => '',
        'bucket' => '',
        'folder' => '',
    ],
]

This only adds the configuration for the storages, use storages to supply an array of storages to upload to:

'storages' => ['aws'] // uploads to AWS
'storages' => ['aws', 'gcs'] // uploads to both AWS and GCS (not sure why you would, but...)

Additional storages can be created by implementing the ImagerStorageInterface (opens new window), and registrering your class using the ImagerService::registerExternalStorage method, like so:

ImagerService::registerExternalStorage('aws', AwsStorage::class);

TIP

Configuring an external storages doesn't mean that the transform will automatically be served from that location, you still need to set your imagerUrl appropriately. Also, the transformed images are still kept in your imagerSystemPath and used for caching purposes.