Compare commits

...

1 Commits

Author SHA1 Message Date
lexx a737c2d571 configurable disks 2024-08-23 20:58:45 +03:00
5 changed files with 30 additions and 35 deletions
+12 -2
View File
@@ -25,8 +25,18 @@ final class Channel
) )
{ {
$this->lucentUrl = $url . "/lucent"; $this->lucentUrl = $url . "/lucent";
$this->filesUrl = $url . "/storage"; $this->filesUrl = $this->makeFilesUrl();
$this->previewTargetUrl = $url . "/". $previewTarget; $this->previewTargetUrl = $url . "/" . $previewTarget;
}
private function makeFilesUrl(): string
{
return match (config("filesystems.disks.lucent.driver")) {
"s3" => config("filesystems.disks.lucent.endpoint") . "/" . config("filesystems.disks.lucent.bucket"),
"local" => $this->url . "/storage" . config("filesystems.disks.lucent.endpoint"),
};
} }
} }
+2 -1
View File
@@ -3,6 +3,7 @@
namespace Lucent\Channel; namespace Lucent\Channel;
use Lucent\File\FileService;
use Lucent\Primitive\Collection; use Lucent\Primitive\Collection;
use Lucent\Schema\Schema; use Lucent\Schema\Schema;
use Lucent\Schema\SchemaService; use Lucent\Schema\SchemaService;
@@ -13,7 +14,7 @@ final class ChannelService
public Channel $channel; public Channel $channel;
private function __construct( private function __construct(
public SchemaService $schemaService public SchemaService $schemaService,
) )
{ {
@@ -26,7 +26,7 @@ return new class extends Migration {
* *
* @return void * @return void
*/ */
public function down public function down()
{ {
Schema::table('records', function (Blueprint $table) { Schema::table('records', function (Blueprint $table) {
$table->dropColumn('search'); $table->dropColumn('search');
+10 -11
View File
@@ -14,7 +14,6 @@ use Lucent\LucentException;
use Lucent\Record\FileData as RecordFile; use Lucent\Record\FileData as RecordFile;
use Lucent\Record\QueryRecord; use Lucent\Record\QueryRecord;
use Lucent\Schema\FilesSchema; use Lucent\Schema\FilesSchema;
use Lucent\Schema\Schema;
use Spatie\ImageOptimizer\OptimizerChainFactory; use Spatie\ImageOptimizer\OptimizerChainFactory;
class FileService class FileService
@@ -28,7 +27,7 @@ class FileService
public function getPath(QueryRecord $file): string public function getPath(QueryRecord $file): string
{ {
return $this->channelService->channel->url . "/storage/" . $file->_file->path; return $this->channelService->channel->filesUrl . "/" . $file->_file->path;
} }
public function createFromUrl(FilesSchema $schema, string $url): FileUploadResult public function createFromUrl(FilesSchema $schema, string $url): FileUploadResult
@@ -111,15 +110,16 @@ class FileService
public function loadDisk(): Filesystem public function loadDisk(): Filesystem
{ {
return Storage::disk('lucent');
return Storage::build([ return Storage::build([
'driver' => 'local', 'driver' => 'lucent',
// 'key' => config("filesystems.disks.s3.key"), // 'key' => config("filesystems.disks.s3.key"),
// 'secret' => config("filesystems.disks.s3.secret"), // 'secret' => config("filesystems.disks.s3.secret"),
// 'region' => config("filesystems.disks.s3.region"), // 'region' => config("filesystems.disks.s3.region"),
// 'bucket' => config("filesystems.disks.s3.bucket"), // 'bucket' => config("filesystems.disks.s3.bucket"),
// // 'url' => $schema->objectStorageUrl, // // 'url' => $schema->objectStorageUrl,
// 'endpoint' => $schema->objectStorageEndpoint, // 'endpoint' => $schema->objectStorageEndpoint,
'use_path_style_endpoint' => false, // 'use_path_style_endpoint' => false,
'visibility' => 'public', // now managed by aws policy 'visibility' => 'public', // now managed by aws policy
'root' => storage_path('app/public'), 'root' => storage_path('app/public'),
'throw' => true, 'throw' => true,
@@ -140,12 +140,10 @@ class FileService
private function createThumbnail(Filesystem $disk, string $schemaPath, string $filename, UploadedFile $file): void private function createThumbnail(Filesystem $disk, string $schemaPath, string $filename, UploadedFile $file): void
{ {
$thumbDir = "thumbs/" . $schemaPath . "/";
// if (!file_exists($thumbDir)) {
$thumbDir = storage_path("app/public/thumbs/" . $schemaPath . "/"); // make_dir_r($thumbDir);
if (!file_exists($thumbDir)) { // }
make_dir_r($thumbDir);
}
try { try {
ImageManagerStatic::configure(['driver' => 'imagick']); ImageManagerStatic::configure(['driver' => 'imagick']);
@@ -157,7 +155,8 @@ class FileService
$image->fit(300, 300); $image->fit(300, 300);
try { try {
$image->encode('webp', 75)->save($thumbDir . $filename); $this->loadDisk()->put($thumbDir . $filename, $image->encode('webp', 75));
// $image->encode('webp', 75)->save($thumbDir . $filename);
} catch (Exception $e) { } catch (Exception $e) {
logger($e->getMessage()); logger($e->getMessage());
} }
+5 -20
View File
@@ -15,6 +15,7 @@ class ImageService
public function __construct( public function __construct(
public ImageManager $imageManager, public ImageManager $imageManager,
public FileService $fileService,
public ChannelService $channelService, public ChannelService $channelService,
public Logger $logger public Logger $logger
) )
@@ -50,28 +51,18 @@ class ImageService
private function createTemplate(string $originalPath, string $template): string private function createTemplate(string $originalPath, string $template): string
{ {
$originalFilePath = public_path("storage/" . $originalPath);
$templateUri = "/templates/" . $template . "/" . $originalPath;
$templateFilePath = public_path("storage/" . $templateUri);
if (!file_exists($originalFilePath)) {
return $this->notFoundImage;
}
if (!file_exists(pathinfo($templateFilePath, PATHINFO_DIRNAME))) {
$this->make_dir(pathinfo($templateFilePath, PATHINFO_DIRNAME));
}
try { try {
$image = $this->imageManager->make($originalFilePath); $image = $this->imageManager->make( $this->fileService->loadDisk()->get($originalPath));
} catch (Exception $e) { } catch (Exception $e) {
$this->logger->error($e->getMessage()); $this->logger->error($e->getMessage());
return $this->notFoundImage; return $originalPath;
} }
$image = $image->filter(new $this->channelService->channel->imageFilters[$template]); $image = $image->filter(new $this->channelService->channel->imageFilters[$template]);
try { try {
$image = $this->imageManager->make((string)$image->encode('webp', 75)); $templateUri = "/templates/" . $template . "/" . $originalPath;
$image->save($templateFilePath); $this->fileService->loadDisk()->put($templateUri, $image->encode('webp', 75));
} catch (Exception $e) { } catch (Exception $e) {
$this->logger->error($e->getMessage()); $this->logger->error($e->getMessage());
return $this->notFoundImage; return $this->notFoundImage;
@@ -80,10 +71,4 @@ class ImageService
return $templateUri; return $templateUri;
} }
private function make_dir(string $path): void
{
is_dir($path) || mkdir($path, 0777, true);
}
} }