需求:前台开启多线程,多次调用接口实现上传视频功能。
分析:1.前台将视频切割成多个切片,基本信息(切片大小sliceSize;切片起始位置sliceOffset;上传成功标记flag等)需要存放在本地数据库SQLLite中记录并作出一些处理。
2. 后台先创建一个总视频大小的临时文件,前台每调用一次接口就向临时文件里写入切片视频大小的字节。
代码如下:
控制层:
/**
* 上传视频
*
* @param request
* @return
*/
@PostMapping(value = "uploadUsVideo")
public ServerResponse<?> uploadUsVideo(HttpServletRequest request) {
try {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile video = multipartRequest.getFile("image");//视频文件
String memo = multipartRequest.getParameter("memo");//视频基本信息
return iImageService.uploadUsVideo(video, memo);
} catch (Exception e) {
return ServerResponse.createByException(e);
}
}
实现类:
/**
* 上传视频
*/
@Override
@Transactional(value = "localMasterTransactionManager", rollbackFor = Exception.class)
public ServerResponse<?> uploadUsVideo(MultipartFile video, String memo) throws Exception {
// add hbn 2020 05-09
if (video == null) {
return ServerResponse.createByErrorMessage("视频为空");
}
if (video.isEmpty()) {
return ServerResponse.createByErrorMessage("视频为空");
}
JSONObject jsonObject = JSON.parseObject(memo);
// 上传起始位置
long sliceOffset = jsonObject.getLongValue("sliceOffset"