一 后端接口
文档:服务端SDK->Java SDK->媒资管理
vod微服务中添加service方法
1 创建工具类
service_vod中创建AliyunVodSDKUtils.java
/**
* @className: AliyunVodSDKUtils
* @description: 阿里云视频工具类
* @date: 2020/12/13
* @author: cakin
*/
public class AliyunVodSDKUtils {
/**
* client初始化
*
* @param accessKeyId accessKeyId
* @param accessKeySecret accessKeySecret
* @return DefaultAcsClient 客户端
*/
public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) {
String regionId = "cn-shanghai"; // 点播服务接入区域
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
}
2 Service
接口
/**
* 功能描述:删除视频
*
* @author cakin
* @date 2020/12/13
* @param videoId 视频id
*/
void removeVideo(String videoId) throws ClientException;
实现
/**
* 功能描述:删除视频
*
* @param videoId 视频id
* @author cakin
* @date 2020/12/13
*/
@Override
public void removeVideo(String videoId) throws ClientException {
DefaultAcsClient client = AliyunVodSDKUtils.initVodClient(
vodProperties.getKeyid(),
vodProperties.getKeysecret());
DeleteVideoRequest request = new DeleteVideoRequest();
request.setVideoIds(videoId);
client.getAcsResponse(request);
}
3 控制器
/**
* 功能描述:删除视频
*
* @author cakin
* @date 2020/12/13
* @param vodId 视频id
* @return R 返回给前端的数据
*/
@DeleteMapping("remove/{vodId}")
public R removeVideo(
@ApiParam(name = "vodId", value = "阿里云视频id", required = true)
@PathVariable String vodId) {
log.warn("service-vod MediaController:videoSourceId= " + vodId);
try {
videoService.removeVideo(vodId);
return R.ok().message("视频删除成功");
} catch (Exception e) {
log.error(ExceptionUtils.getMessage(e));
throw new GuliException(ResultCodeEnum.VIDEO_DELETE_ALIYUN_ERROR);
}
}
二 前端
1 定义api
// 删除视频
removeByVodId(id) {
return request({
baseURL: 'http://127.0.0.1:8130',
url: `/admin/vod/media/remove/${id}`,
method: 'delete'
})
}
2 组件方法
:before-remove="handleBeforeRemove"
:on-remove="handleOnRemove"
import vodApi from '@/api/vod'
// 删除视频
handleOnRemove(file, fileList) {
if (!this.video.videoSourceId) {
return
}
vodApi.removeByVodId(this.video.videoSourceId).then(response => {
this.video.videoSourceId = ''
this.video.videoOriginalName = ''
// 删除视频的同时更新video数据信息
videoApi.updateById(this.video)
this.$message.success(response.message)
})
},
三 删除video的同时删除视频
1 创建feign接口
@Service
@FeignClient(value = "service-vod", fallback = VodMediaServiceFallBack.class)
public interface VodMediaService {
/**
* 功能描述:根据 vodId 删除视频
*
* @author cakin
* @date 2020/12/13
* @param vodId 视频id
* @return R 返回给前端的数据
*/
@DeleteMapping("/admin/vod/media/remove/{vodId}")
R removeVideo(@PathVariable("vodId") String vodId);
}
2 创建容错类
@Service
@Slf4j
public class VodMediaServiceFallBack implements VodMediaService {
/**
* 功能描述:容错保护
*
* @author cakin
* @date 2020/12/13
* @param vodId 视频id
* @return R 返回给前端的数据
*/
@Override
public R removeVideo(String vodId) {
log.info("熔断保护");
return R.error();
}
}
3 service层中调用feign接口
接口
/**
* 功能描述:根据id删除视频
*
* @author cakin
* @date 2020/12/13
* @param id 视频id
*/
void removeMediaVideoById(String id);
实现
/**
* 功能描述:根据id删除视频
*
* @param id 视频id
* @author cakin
* @date 2020/12/13
*/
@Override
public void removeMediaVideoById(String id) {
log.warn("VideoServiceImpl:video id = " + id);
// 根据videoid找到视频id
Video video = baseMapper.selectById(id);
String videoSourceId = video.getVideoSourceId();
log.warn("VideoServiceImpl:videoSourceId= " + videoSourceId);
vodMediaService.removeVideo(videoSourceId);
}
4 控制器
/**
* 功能描述:根据ID删除课时
*
* @param id 课时id
* @return R 返回给前端的数据
* @author cakin
* @date 2020/12/8
*/
@ApiOperation("根据ID删除课时")
@DeleteMapping("remove/{id}")
public R removeById(@ApiParam(value = "课时ID", required = true) @PathVariable String id) {
log.warn("VideoController:video id = " + id);
// 删除视频
videoService.removeMediaVideoById(id);
boolean result = videoService.removeById(id);
if (result) {
return R.ok().message("删除成功");
} else {
return R.error().message("数据不存在");
}
}