109 lines
2.4 KiB
PHP
109 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Service\common\upload;
|
|
|
|
use App\BaseApp\BaseService;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class LocalhostStorageService extends BaseService
|
|
{
|
|
/**
|
|
* @var mixed 单例实例,确保该类只有一个全局实例
|
|
*/
|
|
protected static mixed $_instance;
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
/**
|
|
* 获取实例
|
|
* @return null|static
|
|
*/
|
|
public static function getInstance(): null|static
|
|
{
|
|
$name = get_called_class();
|
|
if (!isset(self::$_instance[$name])) {
|
|
self::$_instance[$name] = new static();
|
|
}
|
|
|
|
return self::$_instance[$name];
|
|
}
|
|
|
|
/**
|
|
* 上传图片
|
|
*
|
|
* @param string $filePath 文件本地路径
|
|
* @param string $key 上传到本地存储的文件名
|
|
* @return array|bool
|
|
*/
|
|
public function uploadImage($filePath, $key): bool|array
|
|
{
|
|
return $this->uploadFile($filePath, $key);
|
|
}
|
|
|
|
/**
|
|
* 上传视频
|
|
*
|
|
* @param string $filePath 文件本地路径
|
|
* @param string $key 上传到本地存储的文件名
|
|
* @return array|bool
|
|
*/
|
|
public function uploadVideo($filePath, $key): bool|array
|
|
{
|
|
return $this->uploadFile($filePath, $key);
|
|
}
|
|
|
|
/**
|
|
* 删除图片
|
|
*
|
|
* @param string $key 本地存储的文件名
|
|
* @return bool
|
|
*/
|
|
public function deleteImage($key): bool
|
|
{
|
|
return $this->deleteFile($key);
|
|
}
|
|
|
|
/**
|
|
* 删除视频
|
|
*
|
|
* @param string $key 本地存储的文件名
|
|
* @return bool
|
|
*/
|
|
public function deleteVideo($key): bool
|
|
{
|
|
return $this->deleteFile($key);
|
|
}
|
|
|
|
/**
|
|
* 上传文件
|
|
*
|
|
* @param string $filePath 文件本地路径
|
|
* @param string $key 上传到本地存储的文件名
|
|
* @return array|bool
|
|
*/
|
|
private function uploadFile(string $filePath, string $key): bool|array
|
|
{
|
|
if (Storage::put($key, file_get_contents($filePath))) {
|
|
return [
|
|
'key' => $key,
|
|
'url' => asset('/storage/' . $key)
|
|
];
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* 删除文件
|
|
*
|
|
* @param string $key 本地存储的文件名
|
|
* @return bool
|
|
*/
|
|
private function deleteFile(string $key): bool
|
|
{
|
|
return Storage::delete($key);
|
|
}
|
|
}
|