-
问题描述
近期线上环境出现视频封面链接异常的问题,视频封面链接地址视频封面地址后缀是 PNG格式,但是把文件保存在本地并把后缀改为MP4,可以用视频播放器正常打开。 -
原因分析
定位问题出现原因是安卓端调用阿里SDK上传视频后传到服务端的视频封面参数出错。 -
解决方案
由于线上已经产生了大量的异常数据,首先要将异常数据修复。同时,安卓端解决代码问题,在下一个发版的时间窗口修复此问题。 -
具体实施
服务端修复此问题的业务流程如下:
先给表增加一个fixed字段标识数据是否已修复。
alter table act_works add column FIXED
int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘数据修复标志:0 未修复 1 待修复 2 已修复’;
update act_works t set t.FIXED=1;
把此表的线上数据导出到测试环境。
服务端通过跑定时任务修复异常的视频链接,业务流程如下:
定时任务代码
public void fixVedioUrl() throws IOException {
//查询作品
List<ActWorksDO> list = actWorksDao.getActWorkToHandle("2019-08-26 02:10:00", 100);
//保存至本地
if (!CollectionUtils.isEmpty(list)) {
for (ActWorksDO bo : list) {
if (!StringUtils.isEmpty(bo.getResourceUrl())) {
String filePath = DOWNLOAD_FILE_DIR + bo.getId() + ".png";
downloadUtils.downloadFile(bo.getResourceUrl(), filePath);
File file = new File(filePath);
if (videoHandler.isImage(file)) {
//判断文件格式,png格式文件删除
LOGGER.info(filePath + "文件格式正常");
if (file.exists()) {
file.delete();
}
actWorksDao.updateFixed(bo.getId(), 2, null);
} else {
try {
LOGGER.info(filePath + "是mp4文件");
//拷贝文件修改视频后缀
String newFile = VIDEO_FILE_DIR + bo.getId() + ".mp4";
File destFile = new File(newFile);
file.renameTo(destFile