145 lines
4.6 KiB
PHP
Executable File
145 lines
4.6 KiB
PHP
Executable File
<?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\adminapi\controller;
|
|
|
|
|
|
use app\common\cache\AdminAuthCache;
|
|
use app\common\service\DirectUploadService;
|
|
use app\common\service\UploadService;
|
|
use Exception;
|
|
use think\response\Json;
|
|
|
|
/**
|
|
* 上传文件
|
|
* Class UploadController
|
|
* @package app\adminapi\controller
|
|
*/
|
|
class UploadController extends BaseAdminController
|
|
{
|
|
/**
|
|
* @notes 上传图片
|
|
* @return Json
|
|
* @author 段誉
|
|
* @date 2021/12/29 16:27
|
|
*/
|
|
public function image()
|
|
{
|
|
try {
|
|
$cid = $this->request->post('cid', 0);
|
|
$result = UploadService::image($cid, $this->adminId);
|
|
return $this->success('上传成功', $result);
|
|
} catch (Exception $e) {
|
|
return $this->fail($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @notes 上传视频
|
|
* @return Json
|
|
* @author 段誉
|
|
* @date 2021/12/29 16:27
|
|
*/
|
|
public function video()
|
|
{
|
|
try {
|
|
$cid = $this->request->post('cid', 0);
|
|
$result = UploadService::video($cid, $this->adminId);
|
|
return $this->success('上传成功', $result);
|
|
} catch (Exception $e) {
|
|
return $this->fail($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @notes 上传文件
|
|
* @return Json
|
|
* @author dw
|
|
* @date 2023/06/26
|
|
*/
|
|
public function file()
|
|
{
|
|
try {
|
|
$cid = $this->request->post('cid', 0);
|
|
$result = UploadService::file($cid, $this->adminId);
|
|
return $this->success('上传成功', $result);
|
|
} catch (Exception $e) {
|
|
return $this->fail($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @notes 浏览器直传 OSS - 签发 STS 临时凭证
|
|
* @return Json
|
|
*/
|
|
public function ossCredentials()
|
|
{
|
|
$type = trim((string)$this->request->post('type', 'video'));
|
|
try {
|
|
$this->assertDirectUploadPermission($type);
|
|
$result = DirectUploadService::issueCredentials(
|
|
$type,
|
|
$this->adminId,
|
|
trim((string)$this->request->post('name', ''))
|
|
);
|
|
return $this->success('ok', $result);
|
|
} catch (Exception $e) {
|
|
return $this->fail($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @notes 浏览器直传 OSS - 上传完成回执(写 file 表 + HEAD 校验)
|
|
* @return Json
|
|
*/
|
|
public function ossConfirm()
|
|
{
|
|
try {
|
|
$type = trim((string)$this->request->post('type', 'video'));
|
|
$this->assertDirectUploadPermission($type);
|
|
$result = DirectUploadService::confirm([
|
|
'type' => $type,
|
|
'key' => trim((string)$this->request->post('key', '')),
|
|
'name' => trim((string)$this->request->post('name', '')),
|
|
'size' => (int)$this->request->post('size', 0),
|
|
'content_type' => trim((string)$this->request->post('content_type', '')),
|
|
'cid' => (int)$this->request->post('cid', 0),
|
|
'admin_id' => $this->adminId,
|
|
]);
|
|
return $this->success('上传成功', $result);
|
|
} catch (Exception $e) {
|
|
return $this->fail($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 安装包属于发布能力,不能沿用普通素材上传的“登录即放行”。
|
|
* @throws Exception
|
|
*/
|
|
private function assertDirectUploadPermission(string $type): void
|
|
{
|
|
if ($type !== DirectUploadService::TYPE_DESKTOP_PACKAGE
|
|
|| (int)($this->adminInfo['root'] ?? 0) === 1) {
|
|
return;
|
|
}
|
|
|
|
$permissions = (new AdminAuthCache($this->adminId))->getAdminUri() ?? [];
|
|
$permissions = array_map('strtolower', $permissions);
|
|
if (!in_array('setting.desktop_workstation/setconfig', $permissions, true)) {
|
|
throw new Exception('权限不足,无法上传医生工作站安装包');
|
|
}
|
|
}
|
|
|
|
}
|