getall(String id);搜索服务中的Service/** * 播放视频栏目录,的课程列表 * @param id 课程id * @return 课程详细对象表 ..._edge浏览器 localhost 跨域">
当前位置:   article > 正文

学成在线15,媒资管理系统集成,视频由于跨域问题,依旧不能播放,据说win10的Edge浏览器可以播放,谷歌火狐不行(跟着做的,缠绕复杂,没怎么搞懂)_edge浏览器 localhost 跨域

edge浏览器 localhost 跨域

在这里插入代码片在这里插入图片描述
接口Api:
在这里插入图片描述

@ApiOperation("播放视频页面,根据课程id查询课程计划信息")
    public Map<String,CoursePub> getall(String id);
  • 1
  • 2

搜索服务中的Service

/**
     * 播放视频栏目录,的课程列表
     * @param id    课程id
     * @return  课程详细对象表
     */
    public Map<String,CoursePub> getall(String id) {
   
        //定义一个搜索对象,指定一个表的索引库xc_course
        SearchRequest searchRequest = new SearchRequest(index);
        //指定这张表的所属类型
        searchRequest.types(type);
        //定义按什么规则搜索的对象
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //按课程id列精确匹配
        searchSourceBuilder.query(QueryBuilders.termQuery("id",id));
        //不需要设置过滤的字段,因为我们要全部取出来
            //        searchSourceBuilder.fetchSource()
        //把规则搜索,添加进搜索对象,准备
        searchRequest.source(searchSourceBuilder);
        
        //准备一个最终要返回的数据map
        HashMap<String, CoursePub> map = new HashMap<>();
        //开始用高可用ES取数据
        try {
   
            //得到搜索的对象数据
            SearchResponse search = restHighLevelClient.search(searchRequest);
            //把数据集拿出来
            SearchHits hits = search.getHits();
            //把数据集,分离为数组,每个数组,里面是一行数据
            SearchHit[] searchHits = hits.getHits();

            //遍历,得到源文档
            for (SearchHit searchHit : searchHits) {
   
                //准备一个要封装的课程对象
                CoursePub coursePub = new CoursePub();
                //获取这一行数据的源文档
                Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
                //开始取字段,并封装coursePub
                //课程id
                String courseId = (String) sourceAsMap.get("id");
                String name = (String) sourceAsMap.get("name");
                String grade = (String) sourceAsMap.get("grade");
                String charge = (String) sourceAsMap.get("charge");
                String pic = (String) sourceAsMap.get("pic");
                String description = (String) sourceAsMap.get("description");
                String teachplan = (String) sourceAsMap.get("teachplan");
                coursePub.setId(courseId);
                coursePub.setName(name);
                coursePub.setPic(pic);
                coursePub.setGrade(grade);
                coursePub.setTeachplan(teachplan);
                coursePub.setDescription(description);
                //添加进要返回数据的map
                map.put(courseId,coursePub);
            }
        } catch (IOException e) {
   
            e.printStackTrace();
        }
        return map;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

Controller

 /**
     * 播放视频栏,的课程列表
     * @param id    课程id
     * @return  课程详细对象表
     */
    @Override
    @GetMapping("/getall/{id}")
    public Map<String, CoursePub> getall(@PathVariable("id") String id) {
   
        return esCourseService.getall(id);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

配置虚拟主机
学习中心的二级域名为ucenter.xuecheng.com,我们在nginx中配置ucenter虚拟主机。
在这里插入图片描述

#后端搜索服务
        location /openapi/search/ {
    
            proxy_pass http://search_server_pool/search/;      
        }
  • 1
  • 2
  • 3
  • 4
  • 5

前端需要添加的代码:
在这里插入图片描述

if (!view_course||!view_course[this.courseId]){
   
          this.$message.error("获取课程信息失败")
          return;
        }

        //根据课程id拿到课程信息
        let courseInfo = view_course[this.courseId];
        //取出teachplan的串
        let teachplanString = courseInfo.teachplan;
        //把串转成对象
        let teachplanObj = JSON.parse(teachplanString);

        //取到课程计划,//转为对象后,再得到课程计划的属性。属性是一个map集合。
        this.teachplanList = teachplanObj.children;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

课程发布存储媒资信息

课程媒资信息是在课程发布的时候存入ElasticSearch索引库,因为课程发布后课程信息将基本不再修改,具体的业务流程如下:
1、课程发布,向课程媒资信息表写入数据。
1)根据课程id删除teachplanMediaPub中的数据
2)根据课程id查询teachplanMedia数据
3)将查询到的teachplanMedia数据插入到teachplanMediaPub中
2、Logstash定时扫描课程媒资信息表,并将课程媒资信息写入索引库。
2.2.2 数据模型
在xc_course数据库创建课程计划媒资发布表:

CREATE TABLE `teachplan_media_pub` (
  `teachplan_id` varchar(32) NOT NULL COMMENT '课程计划id',
  `media_id` varchar(32) NOT NULL COMMENT '媒资文件id',
  `media_fileoriginalname` varchar(128) NOT NULL COMMENT '媒资文件的原始名称',
  `media_url` varchar(256) NOT NULL COMMENT '媒资文件访问地址',
  `courseid` varchar(32) NOT NULL COMMENT '课程Id',
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT
'logstash使用',
  PRIMARY KEY (`teachplan_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

实体类中加入时间戳属性:
在这里插入图片描述

 @Column(name="timestamp")
 private Date timestamp;//时间戳
  • 1
  • 2

Dao
在这里插入图片描述
Service
编写保存课程计划媒资信息方法,并在课程发布时调用此方法。
1、保存课程计划媒资信息方法
本方法采用先删除该课程的媒资信息,再添加该课程的媒资信息。
在这里插入图片描述
先删后插的方法:

/**
     * 向TeachplanMediaPub中保存媒资信息,先删后插
     * @param courseId 课程id
     */
    private void saveTeachplanMediaPub(String courseId){
   
        //先删除,同样课程的媒资记录
        teachplanMediaPubRepository.deleteByCourseId(courseId);
        //然后,teachplanMedia中,取数据媒资文件集合,这个方法是自定义的
        List<TeachplanMedia> teachplanMediaList = teachplanMediaRepository.findByCourseId(courseId);
        //把取到的数据,复制进pub媒资对象中
        List<TeachplanMediaPub> teachplanMediaPubs = new<
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号