You are viewing the documentation for an older version of this package. You can check the version you are using with the following command:
composer show spatie/laravel-medialibrary
Generating custom urls
When getUrl is called, the task of generating that url is passed to an implementation of Spatie\MediaLibrary\UrlGenerator.
The package contains a LocalUrlGenerator that can generate urls for a media library that is stored inside the public path. An S3UrlGenerator is also included for when you're using S3 to store your files.
If you are storing your media files in a private directory or are using a different filesystem, you can write your own UrlGenerator. Your generator must adhere to the Spatie\MediaLibrary\UrlGenerator interface. If you'd extend Spatie\MediaLibrary\UrlGenerator\BaseUrlGenerator you only need to implement the methods: getUrl, getTemporaryUrl and getResponsiveImagesDirectoryUrl. You can call getPathRelativeToRoot to get the relative path to the root of your disk.
The code of the included S3UrlGenerator should help make things more clear:
namespaceSpatie\MediaLibrary\UrlGenerator;
classS3UrlGeneratorextendsBaseUrlGenerator
{
/**
* Get the url for the profile of a media item.
*
* @returnstring
*/publicfunctiongetUrl() : string
{
returnconfig('medialibrary.s3.domain').'/'.$this->getPathRelativeToRoot();
}
/**
* Get the temporary url for a media item.
*
* @param\DateTimeInterface$expiration
* @paramarray$options
*
* @returnstring
*/publicfunctiongetTemporaryUrl(DateTimeInterface $expiration, array $options = []): string
{
return$this
->filesystemManager
->disk($this->media->disk)
->temporaryUrl($this->getPath(), $expiration, $options);
}
/**
* Get the url to the directory containing responsive images.
*
* @returnstring
*/publicfunctiongetResponsiveImagesDirectoryUrl(): string
{
returnconfig('medialibrary.s3.domain').'/'.$this->pathGenerator->getPathForResponsiveImages($this->media);
}
}