74 lines
1.9 KiB
PHP
Executable File
74 lines
1.9 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Common\Files\S3;
|
|
|
|
use Aws\S3\S3Client;
|
|
use Common\Settings\Settings;
|
|
use Illuminate\Contracts\Filesystem\Filesystem;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Str;
|
|
|
|
trait InteractsWithS3Api
|
|
{
|
|
protected function getDiskName(): string
|
|
{
|
|
return request()->input('disk') ?: 'uploads';
|
|
}
|
|
|
|
protected function getDisk(): Filesystem
|
|
{
|
|
return Storage::disk($this->getDiskName());
|
|
}
|
|
|
|
protected function getClient(): ?S3Client
|
|
{
|
|
return $this->getDisk()->getClient();
|
|
}
|
|
|
|
protected function getBucket(): string
|
|
{
|
|
$credentialsKey = config(
|
|
"common.site.{$this->getDiskName()}_disk_driver",
|
|
);
|
|
return config("services.{$credentialsKey}.bucket");
|
|
}
|
|
|
|
protected function getAcl(): string
|
|
{
|
|
return $this->getDiskName() === 'public' ||
|
|
config('common.site.remote_file_visibility') === 'public'
|
|
? 'public-read'
|
|
: 'private';
|
|
}
|
|
|
|
protected function buildFileKey(): string
|
|
{
|
|
$uuid = Str::uuid();
|
|
$filename = request('filename');
|
|
$extension = request('extension');
|
|
$keepOriginalName = app(Settings::class)->get(
|
|
'uploads.keep_original_name',
|
|
);
|
|
|
|
if ($this->getDiskName() === 'public') {
|
|
$fileKey = $keepOriginalName ? $filename : "$uuid.$extension";
|
|
$diskPrefix = request('diskPrefix');
|
|
if ($diskPrefix) {
|
|
$fileKey = "$diskPrefix/$fileKey";
|
|
}
|
|
} else {
|
|
$diskPrefix = $uuid;
|
|
$filename = $keepOriginalName ? $filename : $uuid;
|
|
$fileKey = "$diskPrefix/$filename";
|
|
}
|
|
|
|
$pathPrefix = $this->getDisk()->path('');
|
|
|
|
if ($pathPrefix) {
|
|
$fileKey = "{$pathPrefix}{$fileKey}";
|
|
}
|
|
|
|
return $fileKey;
|
|
}
|
|
}
|