1、准备工作
首先配置文件中需要配置好阿里云相关id和密钥(和阿里云OSS配置一样)
如果不知道id和密钥,就去阿里云官网进行服务开通申请就可以得到
2、代码详解
配置类:用于读取配置文件中的id和密钥
@Component
public class ConstantVodUtil implements InitializingBean {
@Value("${aliyun.vod.file.keyid}")
private String keyId;
@Value("${aliyun.vod.file.keysecret}")
private String keySecret;
public static String ACCESS_KEY_SECRET;
public static String ACCESS_KEY_ID;
@Override
public void afterPropertiesSet() throws Exception {
ACCESS_KEY_ID = keyId;
ACCESS_KEY_SECRET = keySecret;
}
}
Controller:
@RestController
@RequestMapping("/eduvod/video")
public class VodController {
@Autowired
private VodService vodService;
/**
* 上传视频到阿里云
*/
@PostMapping("/uplaodVideo")
public R uplaodVideo(MultipartFile file) {
//返回上传视频的id
String videoId = vodService.uploadVideo(file);
return R.ok().data("videoId", videoId);
}
}
Service:
@Service
public class VodServiceImpl implements VodService {
/**
* 上传视频
*
* @param file
* @return
*/
@Override
public String uploadVideo(MultipartFile file) {
try {
//上传文件的原始名称
String fileName = file.getOriginalFilename();
//上传后显示的名称,这里我想去掉后缀名,例如.mp4
String title = fileName.substring(0, fileName.lastIndexOf("."));
//文件输入流
InputStream inputStream = file.getInputStream();
UploadStreamRequest request = new UploadStreamRequest(ConstantVodUtil.ACCESS_KEY_ID,
ConstantVodUtil.ACCESS_KEY_SECRET, title, fileName, inputStream);
UploadVideoImpl uploader = new UploadVideoImpl();
UploadStreamResponse response = uploader.uploadStream(request);
//获取到视频id(这个很重要,有了视频id从才可以获取播放地址和凭证)
String videoId = response.getVideoId();
return videoId;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
解释说明:为什么接口最终需要返回视频id?
有了视频id,就可以通过官方SDK(就是api的意思)获取到视频的播放地址和凭证
有了播放地址,就可以通过浏览器进行视频播放,那么凭证有什么用呢?
项目中上传的视频一般需要通过模板转码进行加密,也就是说,不能直接通过网址进行播放
也就是说,加密后的视频需要网址 + 凭证进行播放,否则无法播放视频 、
3、测试结果
通过swagger进行测试,可以上传成功,并且能拿到视频id:
阿里云媒资库中可有看到刚刚上传成功的视频,测试成功!