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('权限不足,无法上传医生工作站安装包'); } } }