mirror of
https://code.castopod.org/adaures/castopod
synced 2025-04-19 13:01:19 +00:00
feat(media): set media storage directory as configurable
This commit is contained in:
parent
4503b05a8a
commit
7e1a470ba4
@ -162,9 +162,23 @@ email.SMTPPass="your_smtp_password"
|
||||
| **`SMTPPort`** | number | `25` |
|
||||
| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
|
||||
|
||||
### S3
|
||||
### Media storage
|
||||
|
||||
By default, files are stored in the `public/media` folder using the filesystem.
|
||||
By default, files are saved to the `public/media` folder using the file system.
|
||||
If you need to relocate the `media` folder to a different location, you can
|
||||
specify it in your `.env` file as shown below:
|
||||
|
||||
```ini
|
||||
# […]
|
||||
|
||||
media.root="media"
|
||||
media.storage="/mnt/storage"
|
||||
```
|
||||
|
||||
In this example, the files will be saved to the /mnt/storage/media folder. Make
|
||||
sure to also update your web server configuration to reflect this change.
|
||||
|
||||
### S3
|
||||
|
||||
If you prefer storing your media files on an S3 compatible storage, you may
|
||||
specify it in your `.env`:
|
||||
|
@ -61,7 +61,7 @@ class SettingsController extends BaseController
|
||||
helper(['filesystem', 'media']);
|
||||
|
||||
// delete site folder in media before repopulating it
|
||||
delete_files(media_path('/site'));
|
||||
delete_files(media_path_absolute('/site'));
|
||||
|
||||
// save original in disk
|
||||
$originalFilename = (new FS(config('Media')))->save(
|
||||
@ -71,9 +71,9 @@ class SettingsController extends BaseController
|
||||
|
||||
// convert jpeg image to png if not
|
||||
if ($siteIconFile->getClientMimeType() !== 'image/png') {
|
||||
service('image')->withFile(media_path($originalFilename))
|
||||
service('image')->withFile(media_path_absolute($originalFilename))
|
||||
->convert(IMAGETYPE_JPEG)
|
||||
->save(media_path('/site/icon.png'));
|
||||
->save(media_path_absolute('/site/icon.png'));
|
||||
}
|
||||
|
||||
// generate random hash to use as a suffix to renew browser cache
|
||||
@ -81,15 +81,15 @@ class SettingsController extends BaseController
|
||||
|
||||
// generate ico
|
||||
$ico_lib = new PHP_ICO();
|
||||
$ico_lib->add_image(media_path('/site/icon.png'), [[32, 32], [64, 64]]);
|
||||
$ico_lib->save_ico(media_path("/site/favicon.{$randomHash}.ico"));
|
||||
$ico_lib->add_image(media_path_absolute('/site/icon.png'), [[32, 32], [64, 64]]);
|
||||
$ico_lib->save_ico(media_path_absolute("/site/favicon.{$randomHash}.ico"));
|
||||
|
||||
// resize original to needed sizes
|
||||
foreach ([64, 180, 192, 512] as $size) {
|
||||
service('image')
|
||||
->withFile(media_path('/site/icon.png'))
|
||||
->withFile(media_path_absolute('/site/icon.png'))
|
||||
->resize($size, $size)
|
||||
->save(media_path("/site/icon-{$size}.{$randomHash}.png"));
|
||||
->save(media_path_absolute("/site/icon-{$size}.{$randomHash}.png"));
|
||||
}
|
||||
|
||||
service('settings')
|
||||
@ -109,7 +109,7 @@ class SettingsController extends BaseController
|
||||
{
|
||||
helper(['filesystem', 'media']);
|
||||
// delete site folder in media
|
||||
delete_files(media_path('/site'));
|
||||
delete_files(media_path_absolute('/site'));
|
||||
|
||||
service('settings')
|
||||
->forget('App.siteIcon');
|
||||
|
@ -55,6 +55,14 @@ class Media extends BaseConfig
|
||||
*/
|
||||
public string $root = 'media';
|
||||
|
||||
/**
|
||||
* --------------------------------------------------------------------------
|
||||
* Media storage folder
|
||||
* --------------------------------------------------------------------------
|
||||
* Defines the folder used to store the media root folder
|
||||
*/
|
||||
public string $storage = ROOTPATH . 'public';
|
||||
|
||||
/**
|
||||
* @var array<string, string>
|
||||
*/
|
||||
|
@ -21,11 +21,13 @@ class FS implements FileManagerInterface
|
||||
*/
|
||||
public function save(File $file, string $path): string | false
|
||||
{
|
||||
helper('media');
|
||||
|
||||
if ((pathinfo($path, PATHINFO_EXTENSION) === '') && (($extension = $file->getExtension()) !== '')) {
|
||||
$path = $path . '.' . $extension;
|
||||
}
|
||||
|
||||
$mediaRoot = $this->config->root;
|
||||
$mediaRoot = media_path_absolute();
|
||||
|
||||
if (! file_exists(dirname($mediaRoot . '/' . $path))) {
|
||||
mkdir(dirname($mediaRoot . '/' . $path), 0777, true);
|
||||
@ -49,7 +51,7 @@ class FS implements FileManagerInterface
|
||||
{
|
||||
helper('media');
|
||||
|
||||
return unlink(media_path($key));
|
||||
return unlink(media_path_absolute($key));
|
||||
}
|
||||
|
||||
public function getUrl(string $key): string
|
||||
@ -68,21 +70,21 @@ class FS implements FileManagerInterface
|
||||
{
|
||||
helper('media');
|
||||
|
||||
return rename(media_path($oldKey), media_path($newKey));
|
||||
return rename(media_path_absolute($oldKey), media_path_absolute($newKey));
|
||||
}
|
||||
|
||||
public function getFileContents(string $key): string
|
||||
{
|
||||
helper('media');
|
||||
|
||||
return (string) file_get_contents(media_path($key));
|
||||
return (string) file_get_contents(media_path_absolute($key));
|
||||
}
|
||||
|
||||
public function getFileInput(string $key): string
|
||||
{
|
||||
helper('media');
|
||||
|
||||
return media_path($key);
|
||||
return media_path_absolute($key);
|
||||
}
|
||||
|
||||
public function deletePodcastImageSizes(string $podcastHandle): bool
|
||||
@ -91,7 +93,7 @@ class FS implements FileManagerInterface
|
||||
|
||||
$allPodcastImagesPaths = [];
|
||||
foreach (['jpg', 'jpeg', 'png', 'webp'] as $ext) {
|
||||
$images = glob(media_path("/podcasts/{$podcastHandle}/*_*{$ext}"));
|
||||
$images = glob(media_path_absolute("/podcasts/{$podcastHandle}/*_*{$ext}"));
|
||||
|
||||
if (! $images) {
|
||||
return false;
|
||||
@ -115,7 +117,7 @@ class FS implements FileManagerInterface
|
||||
|
||||
$allPersonsImagesPaths = [];
|
||||
foreach (['jpg', 'jpeg', 'png', 'webp'] as $ext) {
|
||||
$images = glob(media_path("/persons/*_*{$ext}"));
|
||||
$images = glob(media_path_absolute("/persons/*_*{$ext}"));
|
||||
|
||||
if (! $images) {
|
||||
return false;
|
||||
@ -137,6 +139,6 @@ class FS implements FileManagerInterface
|
||||
{
|
||||
helper('media');
|
||||
|
||||
return is_really_writable(ROOTPATH . 'public/' . media_path());
|
||||
return is_really_writable(media_path_absolute());
|
||||
}
|
||||
}
|
||||
|
@ -82,3 +82,15 @@ if (! function_exists('media_path')) {
|
||||
return config('Media')->root . '/' . $uri;
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('media_path_absolute')) {
|
||||
/**
|
||||
* Prefixes the absolute storage directory to the media path of a given uri
|
||||
*
|
||||
* @param string|string[] $uri URI string or array of URI segments
|
||||
*/
|
||||
function media_path_absolute(string | array $uri = ''): string
|
||||
{
|
||||
return config('Media')->storage . '/' . media_path($uri);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user