Browse Source

video on demand

master
chuan 2 months ago
parent
commit
aff6f4fba4
  1. 4
      app/admin/controller/Test.php
  2. 62
      app/admin/controller/Upload.php
  3. 27
      app/admin/controller/Video.php
  4. 7
      app/admin/route/app.php
  5. 22
      app/admin/service/AgentService.php
  6. 84
      app/admin/service/VideoService.php
  7. 13
      app/home/controller/Video.php
  8. 3
      app/home/route/app.php
  9. 28
      app/home/service/VideoService.php
  10. 6
      app/model/AwsS3Model.php
  11. 6
      app/model/VideoOnDemandModel.php
  12. 3
      composer.json
  13. 5211
      composer.lock
  14. 15
      config/common.php

4
app/admin/controller/Test.php

@ -2,10 +2,10 @@
namespace app\admin\controller; namespace app\admin\controller;
use think\facade\Config;
class Test extends AdminBaseController class Test extends AdminBaseController
{ {
public function index() public function index()
{ {
return json(['code' => '0', 'msg' => 'SUCCESS', 'data' => []]); return json(['code' => '0', 'msg' => 'SUCCESS', 'data' => []]);

62
app/admin/controller/Upload.php

@ -2,8 +2,11 @@
namespace app\admin\controller; namespace app\admin\controller;
use app\model\AwsS3Model;
use app\model\FileModel; use app\model\FileModel;
use Aws\S3\S3Client;
use think\facade\Filesystem; use think\facade\Filesystem;
use think\facade\Config;
class Upload extends AdminBaseController class Upload extends AdminBaseController
{ {
@ -36,4 +39,63 @@ class Upload extends AdminBaseController
} }
} }
// 上传视频到aws s3
public function uploadVideo()
{
try {
// 获取文件
$file = $this->request->file('file');
// 检测文件是否存在
if (!$file) {
return json(['code' => 400, 'message' => 'No file uploaded']);
}
// 验证文件类型和大小
$maxSize = 1024 * 1024 * 1024; //限制1G
if ($file->getSize() > $maxSize) {
return json(['code' => 400, 'message' => 'The file size cannot exceed 1 GB']);
}
// 生成唯一的文件名
$fileName = uniqid() . '.' . $file->getOriginalExtension();
// 初始化S3客户端
$s3Config = Config::get('common.aws_s3');
$s3 = new S3Client([
'version' => 'latest',
'region' => $s3Config['aws_region'],
'credentials' => [
'key' => $s3Config['aws_key'],
'secret' => $s3Config['aws_secret'],
],
]);
// 上传文件到S3
$result = $s3->putObject([
'Bucket' => $s3Config['aws_bucket'],
'Key' => 'bourse-video-node/' . $fileName, // s3中的存储路径
'Body' => fopen($file->getRealPath(), 'r'),
]);
// 记录上传的文件
$resData = AwsS3Model::create([
'name' => $fileName,
's3_url' => $result['ObjectURL'],
'size' => $file->getSize(),
'mime' => $file->getOriginalMime(),
'ext' => $file->getOriginalExtension(),
]);;
// 返回上传成功的地址
return json(['code' => '0', 'message' => '上传成功', 'data' => [
'id' => $resData->id,
'url' => $result['ObjectURL'],
'name' => $fileName,
'size' => $file->getSize(),
'mime' => $file->getOriginalMime(),
'ext'=> $file->getOriginalExtension(),
]]);
} catch (\Exception $exception) {
return json(['code' => '100500', 'message' => '系统繁忙', 'data' => [$exception->getMessage()]]);
}
}
} }

27
app/admin/controller/Video.php

@ -0,0 +1,27 @@
<?php
namespace app\admin\controller;
use app\admin\service\VideoService;
class Video extends AdminBaseController
{
// 获取视频点播列表
public function videoOnDemandList()
{
$returnData = (new VideoService())->videoOnDemandList($this->request->param());
return json($returnData);
}
// 添加点播信息
public function addVideoOnDemand()
{
$returnData = (new VideoService())->addVideoOnDemand($this->request->param());
return json($returnData);
}
// 编辑点播信息
public function editVideoOnDemand()
{
$returnData = (new VideoService())->editVideoOnDemand($this->request->param());
return json($returnData);
}
}

7
app/admin/route/app.php

@ -12,6 +12,7 @@ $header = [
// 需要登陆的接口 使用中间件校验 请求路径 XwkjlLbDcG/test // 需要登陆的接口 使用中间件校验 请求路径 XwkjlLbDcG/test
Route::get('/test', 'Test/index'); Route::get('/test', 'Test/index');
Route::post('/test_upload', 'Upload/uploadVideo');
Route::group('/', function () { Route::group('/', function () {
// 上传图片 // 上传图片
Route::post('/upload', 'Upload/upload'); Route::post('/upload', 'Upload/upload');
@ -21,6 +22,12 @@ Route::group('/', function () {
Route::post('/set_config', 'Config/setConfig'); Route::post('/set_config', 'Config/setConfig');
Route::post('/get_config', 'Config/getConfig'); Route::post('/get_config', 'Config/getConfig');
// 视频点播相关
Route::post('/upload_video', 'Upload/uploadVideo'); //上传视频到aws s3
Route::post('/video/video_on_demand_list', 'video/videoOnDemandList'); //获取视频点播列表
Route::post('/video/add_video', 'video/addVideoOnDemand'); //添加点播视频
Route::post('/video/edit_video', 'video/editVideoOnDemand'); //编辑点播视频
// 首页数据 // 首页数据
Route::post('/index', 'Index/index'); Route::post('/index', 'Index/index');
Route::post('/read_num', 'Index/getReamNum'); Route::post('/read_num', 'Index/getReamNum');

22
app/admin/service/AgentService.php

@ -295,26 +295,8 @@ class AgentService extends AdminBaseService
if (empty($param['id'])) { if (empty($param['id'])) {
return $this->toData('1', 'Missing param id'); return $this->toData('1', 'Missing param id');
} }
if (empty($param['title'])) { if (empty($param['title']) || empty($param['anchor_name']) || empty($param['desc']) || empty($param['push_url']) || empty($param['secret_key']) || empty($param['play_url']) || empty($param['agent_id'])) {
return $this->toData('1', 'Missing param title'); return $this->toData('1', 'Parameter error');
}
if (empty($param['anchor_name'])) {
return $this->toData('1', 'Missing param anchor_name');
}
if (empty($param['desc'])) {
return $this->toData('1', 'Missing param desc');
}
if (empty($param['push_url'])) {
return $this->toData('1', 'Missing param push_url');
}
if (empty($param['secret_key'])) {
return $this->toData('1', 'Missing param secret_key');
}
if (empty($param['play_url'])) {
return $this->toData('1', 'Missing param play_url');
}
if (empty($param['agent_id'])) {
return $this->toData('1', 'Missing param agent_id');
} }
// 检查是否存在数据 // 检查是否存在数据
$ckInfo = AwsIvsModel::where('id', $param['id'])->find(); $ckInfo = AwsIvsModel::where('id', $param['id'])->find();

84
app/admin/service/VideoService.php

@ -0,0 +1,84 @@
<?php
namespace app\admin\service;
use app\model\VideoOnDemandModel;
class VideoService extends AdminBaseService
{
// 获取点播列表
public function videoOnDemandList($param)
{
try {
if (empty($param['page']) || !is_numeric($param['page'])) {
return $this->toData('1', '参错错误');
}
$where = [];
if (isset($param['title'])) {
$where['title'] = $param['title'];
}
$list = VideoOnDemandModel::where($where)->order('id', 'desc')->paginate([
'list_rows' => 15,
'page' => $param['page'],
]);
return $this->toData('0', 'SUCCESS', [
'list' => $list->items(), // 当前页的数据
'page' => $list->currentPage(), // 当前页码
'total' => $list->total(), // 总记录数
'last_page' => $list->lastPage(), // 最后一页页码
]);
} catch (\Exception $exception) {
return $this->toData('100500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]);
}
}
// 添加点播信息
public function addVideoOnDemand($param)
{
try {
if (empty($param['title']) || empty($param['cover_id']) || empty($param['video_id']) || empty($param['cover_url']) || empty($param['video_url'] || empty($param['state'])) ) {
return $this->toData('1', '参错错误');
}
$insert = VideoOnDemandModel::create([
'title' => $param['title'],
'desc' => $param['desc'] ?? "",
'cover_id' => $param['cover_id'],
'video_id' => $param['video_id'],
'cover_url' => $param['cover_url'],
'video_url' => $param['video_url'],
'sort' => $param['sort'] ?? 0,
'state' => $param['state'],
]);
return $this->toData('0', 'SUCCESS', ['insert_id' => $insert->id]);
} catch (\Exception $exception) {
return $this->toData('100500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]);
}
}
// 编辑点播信息
public function editVideoOnDemand($param)
{
try {
if (empty($param['id'])) {
return $this->toData('1', 'Missing param id');
}
if (empty($param['title']) || empty($param['cover_id']) || empty($param['video_id']) || empty($param['cover_url']) || empty($param['video_url'] || empty($param['state'])) ) {
return $this->toData('1', '参错错误');
}
$ckInfo = VideoOnDemandModel::where('id', $param['id'])->find();
if (empty($ckInfo)) {
return $this->toData('1', '编辑的数据不存在');
}
$ckInfo->title = $param['title'];
$ckInfo->desc = $param['desc'];
$ckInfo->cover_id = $param['cover_id'];
$ckInfo->video_id = $param['video_id'];
$ckInfo->cover_url = $param['cover_url'];
$ckInfo->video_url = $param['video_url'];
$ckInfo->sort = $param['sort'];
$ckInfo->state = $param['state'];
$ckInfo->save();
return $this->toData('1', 'Successful');
} catch (\Exception $exception) {
return $this->toData('100500', 'The system is busy.', [$exception->getMessage(), $exception->getTrace()]);
}
}
}

13
app/home/controller/Video.php

@ -0,0 +1,13 @@
<?php
namespace app\home\controller;
use app\home\service\VideoService;
use think\response\Json;
class Video extends HomeBaseController
{
public function videoOnDemandList(): Json
{
$returnData = (new VideoService())->getVideoOnDemandList($this->request->post());
return json($returnData);
}
}

3
app/home/route/app.php

@ -265,6 +265,9 @@ Route::group('/',function (){
Route::post('user/apply_loan', 'User/apply_loan'); Route::post('user/apply_loan', 'User/apply_loan');
Route::post('user/loan', 'User/loan'); Route::post('user/loan', 'User/loan');
// 视频点播相关
Route::post('video/video_on_demand_list', 'video/videoOnDemandList'); // 获取视频点播列表
})->middleware(\app\home\middleware\AuthMiddleware::class); })->middleware(\app\home\middleware\AuthMiddleware::class);
// 美股申购列表 不需要登陆 // 美股申购列表 不需要登陆

28
app/home/service/VideoService.php

@ -0,0 +1,28 @@
<?php
namespace app\home\service;
use app\model\VideoOnDemandModel;
class VideoService extends BaseHomeService
{
public function getVideoOnDemandList($param): array
{
try {
if (empty($param['page']) || !is_numeric($param['page'])) {
return $this->toData('1', '参错错误');
}
$list = VideoOnDemandModel::where(['state'=>1])->order('sort', 'desc')->paginate([
'list_rows' => 15,
'page' => $param['page'],
]);
return $this->toData('0', 'Successful', [
'list' => $list->items(), // 当前页的数据
'page' => $list->currentPage(), // 当前页码
'total' => $list->total(), // 总记录数
'last_page' => $list->lastPage(), // 最后一页页码
]);
} catch (\Exception $exception) {
return $this->toData('100500', 'The system is busy.', []);
}
}
}

6
app/model/AwsS3Model.php

@ -0,0 +1,6 @@
<?php
namespace app\model;
class AwsS3Model extends BaseModel
{
protected $name = 'aws_s3';
}

6
app/model/VideoOnDemandModel.php

@ -0,0 +1,6 @@
<?php
namespace app\model;
class VideoOnDemandModel extends BaseModel
{
protected $name = 'video_on_demand';
}

3
composer.json

@ -35,7 +35,8 @@
"lcobucci/jwt": "^4.0", "lcobucci/jwt": "^4.0",
"phpoffice/phpspreadsheet": "^1.29", "phpoffice/phpspreadsheet": "^1.29",
"electrolinux/phpquery": "dev-master", "electrolinux/phpquery": "dev-master",
"fabpot/goutte": "*" "fabpot/goutte": "*",
"aws/aws-sdk-php": "^3.336"
}, },
"require-dev": { "require-dev": {
"symfony/var-dumper": "^4.2", "symfony/var-dumper": "^4.2",

5211
composer.lock

File diff suppressed because it is too large

15
config/common.php

@ -0,0 +1,15 @@
<?php
return [
// aws s3配置
'aws_s3' => [
'aws_key' => 'AKIATCKAMOTOLA7KUPEV',
'aws_secret' => '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',
'aws_region' => 'ap-northeast-1',
'aws_bucket' => 'bourse-vod',
],
// chat聊天服务器配置
'chat_server' => [
'bse_url' => 'https://chat.jdtest88.com', //测试环境-chat服务api域名
],
];
Loading…
Cancel
Save