新闻资讯

YYC优雅草松鼠聚合直播系统·前端视频模块显示空白-解决办法-视频上传处理方法

发布人:伊凡 发布时间:2022-10-28 18:00:42
分享到:

前端视频模块显示空白

起因


由于短视频上传后路劲不正确导致前台无法正常显示,地址拼接有错

解决方案

更新v3.0.2后 视频上传处理部分进行了调整,可直接覆盖songshu-jhlive-admin/application/admin/controller/Video.php 文件

具体代码参考如下

复制
class Video extends Base
{
    public function upload_image(){
        $this->onlyAdmin();

        $file = request()->file('file');
        $oldfile = input("oldfile");
        if($file){
            //图片可以是20M以内
            $info = $file->validate(['size'=>20480000,'ext'=>'jpg,png,gif,jpeg'])->move(ROOT_PATH . 'public/uploads');
            if($info){
                $exif = exif_read_data(ROOT_PATH . 'public/uploads/'.$info->getSaveName());
                $image = Image::open(ROOT_PATH . 'public/uploads/'.$info->getSaveName());

                if(!empty($exif['Orientation'])) {
                    switch($exif['Orientation']) {
                        case 8:
                            $image = $image->rotate(-90);
                            break;
                        case 3:
                            $image = $image->rotate(180);
                            break;
                        case 6:
                            $image = $image->rotate(90);
                            break;
                    }
                }

                $width = $image->width();
                $height = $image->height();
                $_height = $width ? $height/$width * 400 : 0;
                $filepath = $info->getSaveName();
                $filepath = str_replace("\\","/",$filepath);
                $image->thumb(400, $_height)->save(ROOT_PATH . 'public/uploads/'.$filepath);

                if(strlen($oldfile) && strpos($oldfile,"uploads/") === 0){
                    @unlink(ROOT_PATH . 'public/'.$oldfile);//删除旧图片
                }
                $this->success(['filepath'=>'uploads/'.$filepath]);

            }else{
                // 上传失败获取错误信息
                $this->error($file->getError());
            }
        }
        $this->error("未上传图片");
    }

    public function upload_video(){
        $this->onlyAdmin();

        $file = request()->file('file');
        $oldfile = input("oldfile");
        if($file){
            //视频可以是200M以内
            $info = $file->validate(['size'=>204800000,'ext'=>'avi,mpg,mpeg,mpe,m1v,m2v,mpv2,mp2v,dat,ts,tp,tpr,pva,pss,mp4,m4v,m4p,m4b,3gp,3gpp,3g2,3gp2,ogg,mov,qt,amr,rm,ram,rmvb,rpm'])->move(ROOT_PATH . 'public/uploads');
            if($info){
                $filepath = $info->getSaveName();
                $filepath = str_replace("\\","/",$filepath);

                if(strlen($oldfile) && strpos($oldfile,"uploads/") === 0){
                    @unlink(ROOT_PATH . 'public/'.$oldfile);//删除旧视频
                }
                $this->success(['filepath'=>'uploads/'.$filepath]);

            }else{
                // 上传失败获取错误信息
                $this->error($file->getError());
            }
        }
        $this->error("未上传图片");
    }

    public function save_video()
    {
        $this->onlyAdmin();
        if (!request()->isPost()) $this->error('请求类型有误');
        $id = input("id");
        $video = Db::name("videos")->where("id", $id)->find();
        $title = input('title');
        $img = input('imageurl');
        $address = input('videourl');

        if (strlen($title) == 0) $this->error("请填写一个标题");
        if (strlen($img) == 0) $this->error("请填上传一张封面照片");
        if (strlen($address) == 0) $this->error("视频地址不能为空");
        if ($video) {
            $data = array();
            $data['title'] = $title;
            $data['img'] = $img;
            $data['address'] = $address;
            $data['update_time'] = time();
            if (Db::name("videos")->where("id",$video['id'])->update($data)) {
                $this->success(NULL, "视频更新成功");
            } else {
                $this->error("视频更新未成功");
            }
        } else {
            $data = array();
            $data['title'] = $title;
            $data['img'] = $img;
            $data['address'] = $address;
            $data['create_time'] = time();
            if (Db::name("videos")->insert($data)) {
                $this->success(NULL, "视频发布成功");
            } else {
                $this->error("视频发布未成功");
            }
        }
    }

    public function getlist(){
        $this->onlyAdmin();

        $db = Db::name("videos")->field('id,title,img,create_time,update_time,collect_times');

        $keyword = input("keyword");
        if(strlen($keyword)){
            $db = $db->where("title","like","%".addslashes($keyword)."%");
        }

        $db = $db->order("id","desc");

        $list = $db->paginate(10);

        $list->each(function ($item,$key){
            $item['create_time'] = date('Y-m-d H:i:s',$item['create_time']);
            $item['update_time'] = $item['update_time'] ? date('Y-m-d H:i:s',$item['update_time']) : '从未更新';
            return $item;
        });

        $this->success($list);
    }

    public function get_video(){
        $this->onlyAdmin();
        $video = Db::name("videos")->where("id",intval(input("id")))->find();
        if(!$video) $this->error("未找到相关视频");
        $this->success($video);
    }

    public function delete(){
        $this->onlyAdmin();
        $video = Db::name("videos")->where("id",intval(input("id")))->find();
        if(!$video) $this->error("未找到相关视频");
        if(Db::name("videos")->where("id",$video['id'])->delete()){
            $img = $video['img'];
            $address = $video['address'];
            if(strpos($img,"uploads/") === 0) @unlink($img);
            if(strpos($address,"uploads/") === 0) @unlink($address);
            $this->success(NULL,"删除成功");
        }else{
            $this->error("删除失败");
        }
    }
}

更新后

songshu-jhlive-admin/application/config.php 多了一行

  'storage_url'=>'https://jh.youyacao.com/',
    // 应用调试模式
    'app_debug'              => true,
    // 应用Trace
    'app_trace'              => false,
    // 应用模式状态
    'app_status'             => '',
    // 是否支持多模块
    'app_multi_module'       => true,
    // 入口自动绑定模块
    'auto_bind_module'       => false,
    // 注册的根命名空间
    'root_namespace'         => [],
    // 扩展函数文件
    'extra_file_list'        => [THINK_PATH . 'helper' . EXT],
    // 默认输出类型
    'default_return_type'    => 'json',
    // 默认AJAX 数据返回格式,可选json xml ...
    'default_ajax_return'    => 'json',
    // 默认JSONP格式返回的处理方法

storage_url 对应填写自己的域名即可。