文件预览
图片和视频上传成功后,可以通过预览
按钮查看文件内容(如图片和MP4格式视频),对于浏览器不支持查看的文件提示错误信息(如avi格式视频)
接口定义
根据上传文件的ID获取文件对应的可访问URL,对于图片或MP4格式的视频可通过浏览器直接预览,对于其他文件如.avi格式
的视频文件预览时提示错误信息
@ApiOperation(value = "预览文件")
@GetMapping("/preview/{mediaId}")
public RestResponse<String> getPlayUrlByMediaId(@PathVariable String mediaId) {
MediaFiles mediaFile = mediaFileService.getFileById(mediaId);
return RestResponse.success(mediaFile.getUrl());
}
业务类
第一步: 修改保存媒资信息到数据库的方法, 当上传的文件是图片或MP4格式的视频时才设置URL字段,其他情况需要对文件进行处理后再设置URL字段
/**
* 将文件信息添加到文件表
* @param companyId 机构id
* @param uploadFileParamsDto 上传文件的信息
* @param objectName 对象名称
* @param fileMD5 文件的md5码
* @param bucket 桶
*/
@Transactional
public MediaFiles addMediaFilesToDB(Long companyId, UploadFileParamsDto uploadFileParamsDto, String objectName, String fileMD5, String bucket) {
// 保存文件信息到数据库
MediaFiles mediaFiles = mediaFilesMapper.selectById(fileMD5);
if (mediaFiles == null) {
mediaFiles = new MediaFiles();
BeanUtils.copyProperties(uploadFileParamsDto, mediaFiles);
mediaFiles.setId(fileMD5);
mediaFiles.setFileId(fileMD5);
mediaFiles.setCompanyId(companyId);
mediaFiles.setBucket(bucket);
mediaFiles.setCreateDate(LocalDateTime.now());
mediaFiles.setStatus("1");
mediaFiles.setFilePath(objectName);
// 获取源文件名的contentType
String contentType = getContentType(objectName);
// 如果是图片格式或者mp4格式则设置URL属性,否则不设置
if (contentType.contains("image") || contentType.contains("mp4")) {
mediaFiles.setUrl("/" + bucket + "/" + objectName);
}
// 查阅数据字典,002003表示审核通过
mediaFiles.setAuditStatus("002003");
}
int insert = mediaFilesMapper.insert(mediaFiles);
if (insert <= 0) {
XueChengPlusException.cast("保存文件信息失败");
}
return mediaFiles;
}
第二步: 定义接口方法实现根据文件Id获取文件对应URL的业务逻辑
MediaFiles getFileById(String mediaId);
@Override
public MediaFiles getFileById(String id) {
MediaFiles mediaFiles = mediaFilesMapper.selectById(id);
if (mediaFiles == null || StringUtils.isEmpty(mediaFiles.getUrl())) {
XueChengPlusException.cast("视频还没有转码处理");
}
return mediaFiles;
}
测试
操作媒资管理界面: 上传图片文件可以预览, 上传MP4视频文件可以预览,上传avi格式视频文件尝试预览提示错误提示信息