|
|
<?php
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | likeadmin快速开发前后端分离管理后台(PHP版)
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
|
|
|
// | 开源版本可自由商用,可去除界面版权logo
|
|
|
// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
|
|
|
// | github下载:https://github.com/likeshop-github/likeadmin
|
|
|
// | 访问官网:https://www.likeadmin.cn
|
|
|
// | likeadmin团队 版权所有 拥有最终解释权
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | author: likeadminTeam
|
|
|
// +----------------------------------------------------------------------
|
|
|
|
|
|
namespace app\common\service;
|
|
|
|
|
|
|
|
|
use app\common\enum\FileEnum;
|
|
|
use app\common\model\file\File;
|
|
|
use app\common\service\storage\Driver as StorageDriver;
|
|
|
use Exception;
|
|
|
use think\facade\Cookie;
|
|
|
|
|
|
class UploadService
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
* @notes 上传图片
|
|
|
* @param $cid
|
|
|
* @param int $user_id
|
|
|
* @param string $saveDir
|
|
|
* @return array
|
|
|
* @throws Exception
|
|
|
* @author 段誉
|
|
|
* @date 2021/12/29 16:30
|
|
|
*/
|
|
|
public static function image($cid, int $sourceId = 0, int $source = FileEnum::SOURCE_ADMIN, string $saveDir = 'uploads/images')
|
|
|
{
|
|
|
try {
|
|
|
$config = [
|
|
|
'default' => ConfigService::get('storage', 'default', 'local'),
|
|
|
'engine' => ConfigService::get('storage') ?? ['local' => []],
|
|
|
];
|
|
|
|
|
|
// 2、执行文件上传
|
|
|
$StorageDriver = new StorageDriver($config);
|
|
|
$StorageDriver->setUploadFile('file');
|
|
|
$fileName = $StorageDriver->getFileName();
|
|
|
$fileInfo = $StorageDriver->getFileInfo();
|
|
|
|
|
|
// 校验上传文件后缀
|
|
|
if (!in_array(strtolower($fileInfo['ext']), config('project.file_image'))) {
|
|
|
throw new Exception("上传图片不允许上传" . $fileInfo['ext'] . "文件");
|
|
|
}
|
|
|
|
|
|
// 上传文件
|
|
|
$saveDir = self::getUploadUrl($saveDir);
|
|
|
if (!$StorageDriver->upload($saveDir)) {
|
|
|
throw new Exception($StorageDriver->getError());
|
|
|
}
|
|
|
|
|
|
// 3、处理文件名称
|
|
|
if (strlen($fileInfo['name']) > 128) {
|
|
|
$name = substr($fileInfo['name'], 0, 123);
|
|
|
$nameEnd = substr($fileInfo['name'], strlen($fileInfo['name']) - 5, strlen($fileInfo['name']));
|
|
|
$fileInfo['name'] = $name . $nameEnd;
|
|
|
}
|
|
|
|
|
|
// 4、写入数据库中
|
|
|
$file = File::create([
|
|
|
'cid' => $cid,
|
|
|
'type' => FileEnum::IMAGE_TYPE,
|
|
|
'name' => $fileInfo['name'],
|
|
|
'uri' => $saveDir . '/' . str_replace("\\", "/", $fileName),
|
|
|
'source' => $source,
|
|
|
'source_id' => $sourceId,
|
|
|
'create_time' => time(),
|
|
|
]);
|
|
|
|
|
|
// 5、返回结果
|
|
|
return [
|
|
|
'id' => $file['id'],
|
|
|
'cid' => $file['cid'],
|
|
|
'type' => $file['type'],
|
|
|
'name' => $file['name'],
|
|
|
'uri' => FileService::getFileUrl($file['uri']),
|
|
|
'url' => $file['uri']
|
|
|
];
|
|
|
} catch (Exception $e) {
|
|
|
throw new Exception($e->getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* @notes 视频上传
|
|
|
* @param $cid
|
|
|
* @param int $user_id
|
|
|
* @param string $saveDir
|
|
|
* @return array
|
|
|
* @throws Exception
|
|
|
* @author 段誉
|
|
|
* @date 2021/12/29 16:32
|
|
|
*/
|
|
|
public static function video($cid, int $sourceId = 0, int $source = FileEnum::SOURCE_ADMIN, string $saveDir = 'uploads/video')
|
|
|
{
|
|
|
try {
|
|
|
$config = [
|
|
|
'default' => ConfigService::get('storage', 'default', 'local'),
|
|
|
'engine' => ConfigService::get('storage') ?? ['local' => []],
|
|
|
];
|
|
|
|
|
|
// 2、执行文件上传
|
|
|
$StorageDriver = new StorageDriver($config);
|
|
|
$StorageDriver->setUploadFile('file');
|
|
|
$fileName = $StorageDriver->getFileName();
|
|
|
$fileInfo = $StorageDriver->getFileInfo();
|
|
|
|
|
|
// 校验上传文件后缀
|
|
|
if (!in_array(strtolower($fileInfo['ext']), config('project.file_video'))) {
|
|
|
throw new Exception("上传视频不允许上传" . $fileInfo['ext'] . "文件");
|
|
|
}
|
|
|
|
|
|
// 上传文件
|
|
|
$saveDir = self::getUploadUrl($saveDir);
|
|
|
if (!$StorageDriver->upload($saveDir)) {
|
|
|
throw new Exception($StorageDriver->getError());
|
|
|
}
|
|
|
|
|
|
// 3、处理文件名称
|
|
|
if (strlen($fileInfo['name']) > 128) {
|
|
|
$name = substr($fileInfo['name'], 0, 123);
|
|
|
$nameEnd = substr($fileInfo['name'], strlen($fileInfo['name']) - 5, strlen($fileInfo['name']));
|
|
|
$fileInfo['name'] = $name . $nameEnd;
|
|
|
}
|
|
|
|
|
|
// 4、写入数据库中
|
|
|
$file = File::create([
|
|
|
'cid' => $cid,
|
|
|
'type' => FileEnum::VIDEO_TYPE,
|
|
|
'name' => $fileInfo['name'],
|
|
|
'uri' => $saveDir . '/' . str_replace("\\", "/", $fileName),
|
|
|
'source' => $source,
|
|
|
'source_id' => $sourceId,
|
|
|
'create_time' => time(),
|
|
|
]);
|
|
|
|
|
|
// 5、返回结果
|
|
|
return [
|
|
|
'id' => $file['id'],
|
|
|
'cid' => $file['cid'],
|
|
|
'type' => $file['type'],
|
|
|
'name' => $file['name'],
|
|
|
'uri' => FileService::getFileUrl($file['uri']),
|
|
|
'url' => $file['uri']
|
|
|
];
|
|
|
} catch (Exception $e) {
|
|
|
throw new Exception($e->getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @notes 上传文件
|
|
|
* @param $cid
|
|
|
* @param int $sourceId
|
|
|
* @param int $source
|
|
|
* @param string $saveDir
|
|
|
* @return array
|
|
|
* @throws Exception
|
|
|
* @author dw
|
|
|
* @date 2023/06/26
|
|
|
*/
|
|
|
public static function file($cid, int $sourceId = 0, int $source = FileEnum::SOURCE_ADMIN, string $saveDir = 'uploads/file')
|
|
|
{
|
|
|
try {
|
|
|
$config = [
|
|
|
'default' => ConfigService::get('storage', 'default', 'local'),
|
|
|
'engine' => ConfigService::get('storage') ?? ['local' => []],
|
|
|
];
|
|
|
// 2、执行文件上传
|
|
|
$StorageDriver = new StorageDriver($config);
|
|
|
$StorageDriver->setUploadFile('file');
|
|
|
$fileName = $StorageDriver->getFileName();
|
|
|
$fileInfo = $StorageDriver->getFileInfo();
|
|
|
|
|
|
// 校验上传文件后缀
|
|
|
if (!in_array(strtolower($fileInfo['ext']), config('project.file_file'))) {
|
|
|
throw new Exception("上传文件不允许上传" . $fileInfo['ext'] . "文件");
|
|
|
}
|
|
|
|
|
|
// 上传文件
|
|
|
$saveDir = self::getUploadUrl($saveDir);
|
|
|
if (!$StorageDriver->upload($saveDir)) {
|
|
|
throw new Exception($StorageDriver->getError());
|
|
|
}
|
|
|
|
|
|
// 3、处理文件名称
|
|
|
if (strlen($fileInfo['name']) > 128) {
|
|
|
$name = substr($fileInfo['name'], 0, 123);
|
|
|
$nameEnd = substr($fileInfo['name'], strlen($fileInfo['name']) - 5, strlen($fileInfo['name']));
|
|
|
$fileInfo['name'] = $name . $nameEnd;
|
|
|
}
|
|
|
|
|
|
// 4、写入数据库中
|
|
|
$file = File::create([
|
|
|
'cid' => $cid,
|
|
|
'type' => FileEnum::FILE_TYPE,
|
|
|
'name' => $fileInfo['name'],
|
|
|
'uri' => $saveDir . '/' . str_replace("\\", "/", $fileName),
|
|
|
'source' => $source,
|
|
|
'source_id' => $sourceId,
|
|
|
'create_time' => time(),
|
|
|
]);
|
|
|
|
|
|
// 5、返回结果
|
|
|
return [
|
|
|
'id' => $file['id'],
|
|
|
'cid' => $file['cid'],
|
|
|
'type' => $file['type'],
|
|
|
'name' => $file['name'],
|
|
|
'uri' => FileService::getFileUrl($file['uri']),
|
|
|
'url' => $file['uri']
|
|
|
];
|
|
|
} catch (Exception $e) {
|
|
|
throw new Exception($e->getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static function coszip(string $saveDir = 'configFiles/game_dld')
|
|
|
{
|
|
|
try {
|
|
|
$storage = ConfigService::get('storage', 'qcloud');
|
|
|
$all = ConfigService::get('storage');
|
|
|
$gameid = Cookie::get('usegame');
|
|
|
if ($gameid && strpos($gameid, '-sp') !== false) {
|
|
|
$storage['bucket'] = 'singapore-1301961618';
|
|
|
$storage['region'] = 'ap-singapore';
|
|
|
$storage['domain'] = 'https://singaporecrs-cdn.yqgame.online';
|
|
|
foreach ($all as $k => $s) {
|
|
|
if ($k !== 'qcloud') {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
$all[$k]['bucket'] = $storage['bucket'];
|
|
|
$all[$k]['region'] = $storage['region'];
|
|
|
$all[$k]['domain'] = $storage['domain'];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$config = [
|
|
|
'default' => $storage,
|
|
|
'engine' => $all ?? ['local' => []],
|
|
|
];
|
|
|
|
|
|
// 2、执行文件上传
|
|
|
$StorageDriver = new StorageDriver($config, 'qcloud');
|
|
|
$StorageDriver->setUploadFile('file', true);
|
|
|
$fileName = $StorageDriver->getFileName();
|
|
|
$fileInfo = $StorageDriver->getFileInfo();
|
|
|
|
|
|
// 校验上传文件后缀
|
|
|
if (!in_array(strtolower($fileInfo['ext']), ['zip'])) {
|
|
|
throw new Exception("只能上传zip文件");
|
|
|
}
|
|
|
|
|
|
// 上传文件
|
|
|
if (!$StorageDriver->upload($saveDir)) {
|
|
|
throw new Exception($StorageDriver->getError());
|
|
|
}
|
|
|
|
|
|
$uri = $saveDir . '/' . str_replace("\\", "/", $fileName);
|
|
|
$uri = stripslashes($uri);
|
|
|
$domain = stripslashes($storage['domain']);
|
|
|
|
|
|
// 5、返回结果
|
|
|
return [
|
|
|
'uri' => $uri,
|
|
|
'url' => $domain . '/' . $uri,
|
|
|
];
|
|
|
} catch (Exception $e) {
|
|
|
throw new Exception($e->getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @notes 上传地址
|
|
|
* @param $saveDir
|
|
|
* @return string
|
|
|
* @author dw
|
|
|
* @date 2023/06/26
|
|
|
*/
|
|
|
private static function getUploadUrl($saveDir): string
|
|
|
{
|
|
|
return $saveDir . '/' . date('Ymd');
|
|
|
}
|
|
|
}
|