| | |
| | | public interface IClassLectureService { |
| | | |
| | | /** |
| | | * 新增章节文件夹 |
| | | * 新增章节文件夹 |
| | | * |
| | | * @param parentChapterId |
| | | * 父级章节文件夹id |
| | | * 父级章节文件夹id |
| | | * @param name |
| | | * 文件夹名称 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{"chapterId","90023afwe32300fee23"}},若成功,则返回ChapterId |
| | | * 文件夹名称 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{"chapterId","90023afwe32300fee23"}},若成功,则返回ChapterId |
| | | */ |
| | | Result addChapter(String parentChapterId, String name); |
| | | |
| | | /** |
| | | * 返回下级章节文件夹列表,如果 |
| | | * 返回下级章节文件夹列表,如果 |
| | | * |
| | | * @param classId |
| | | * 班级id |
| | | * 班级id |
| | | * @param parentChapterId |
| | | * 父级章节文件夹id |
| | | * @return 返回章节列表 |
| | | * 父级章节文件夹id |
| | | * @return 返回章节列表 |
| | | */ |
| | | List<SubjectProgressTreeV> getChapterTreeVList(String classId, String parentChapterId); |
| | | |
| | | /** |
| | | * 课件列表搜索 |
| | | * 课件列表搜索 |
| | | * |
| | | * @param chapterId |
| | | * 章节id |
| | | * 章节id |
| | | * @param keyword |
| | | * 关键字 |
| | | * 关键字 |
| | | * @param pageSize |
| | | * 页码 |
| | | * 页码 |
| | | * @param pageNum |
| | | * 每页显示数据条数 |
| | | * 每页显示数据条数 |
| | | * @param type |
| | | * 类型 |
| | | * 类型 |
| | | * @return |
| | | */ |
| | | List<MyLectureV> listLectureV(String learnerId, String chapterId, String keyword, Integer pageSize, Integer pageNum, |
| | | String type); |
| | | |
| | | /** |
| | | * 修改章节文件夹 |
| | | * 修改章节文件夹 |
| | | * |
| | | * @param chapterId |
| | | * 文件夹id |
| | | * 文件夹id |
| | | * @param name |
| | | * 名称 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | * 名称 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | */ |
| | | Result updateChapter(String chapterId, String name); |
| | | |
| | | /** |
| | | * 删除章节文件夹 |
| | | * 删除章节文件夹 |
| | | * |
| | | * @param chapterIds |
| | | * 章节文件夹id数组 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | * 章节文件夹id数组 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | */ |
| | | Result deleteChapter(String[] chapterIds); |
| | | |
| | | /** |
| | | * 新增课件 |
| | | * 新增课件 |
| | | * |
| | | * @param chapterId |
| | | * 章节id |
| | | * 章节id |
| | | * @param resId |
| | | * 资源id |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{"chapterId","90023afwe32300fee23"}},若成功,则返回chapterId |
| | | * 资源id |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{"chapterId","90023afwe32300fee23"}},若成功,则返回chapterId |
| | | */ |
| | | Result addClsLecture(String chapterId, String resId); |
| | | |
| | | /** |
| | | * 修改课件 |
| | | * 修改课件 |
| | | * |
| | | * @param lectureId |
| | | * 课件id |
| | | * 课件id |
| | | * @param resId |
| | | * 资源id |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | * 资源id |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | */ |
| | | Result updateLecture(String lectureId, String resId); |
| | | |
| | | /** |
| | | * 删除课件 |
| | | * 删除课件 |
| | | * |
| | | * @param lectureIds |
| | | * 课件id数组 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | * 课件id数组 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | */ |
| | | Result deleteLecture(String[] lectureIds); |
| | | |
| | | /** |
| | | * 课件学习进度提交 |
| | | * 课件学习进度提交 |
| | | * |
| | | * @param clsLectureId |
| | | * @param from |
| | |
| | | Result doStudy(String clsLectureId, Double from, Double to); |
| | | |
| | | /** |
| | | * 复制课件 |
| | | * 复制课件 |
| | | * |
| | | * @param lectureId |
| | | * 课件id |
| | | * 课件id |
| | | * @param destChapterId |
| | | * 目标章节id |
| | | * 目标章节id |
| | | * @param name |
| | | * 课件名称 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | * 课件名称 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | */ |
| | | Result doCopyLecture(String lectureId, String destChapterId, String name); |
| | | |
| | | /** |
| | | * 移动课件 |
| | | * 移动课件 |
| | | * |
| | | * @param lectureId |
| | | * 课件id |
| | | * 课件id |
| | | * @param destChapterId |
| | | * 目标章节id |
| | | * 目标章节id |
| | | * @param name |
| | | * 课件名称 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | * 课件名称 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{}} |
| | | */ |
| | | Result doMoveLecture(String lectureId, String destChapterId, String name); |
| | | |
| | | /** |
| | | * 课件列表搜索 |
| | | * 课件列表搜索 |
| | | * |
| | | * @param chapterId |
| | | * 章节id |
| | | * 章节id |
| | | * @param keyword |
| | | * 关键字 |
| | | * 关键字 |
| | | * @param pageNo |
| | | * 页码 |
| | | * 页码 |
| | | * @param pageNum |
| | | * 每页显示数据条数 |
| | | * 每页显示数据条数 |
| | | * @param type |
| | | * 类型 |
| | | * 类型 |
| | | * @return |
| | | */ |
| | | List<ClsSubjectLecture> listLecture(String chapterId, String keyword, Integer pageNo, Integer pageNum, String type, |
| | | String classId); |
| | | |
| | | /** |
| | | * 课件列表 |
| | | * 课件列表 |
| | | * |
| | | * @param classId |
| | | * 章节id |
| | | * 章节id |
| | | * @return |
| | | */ |
| | | List<ClsSubjectLecture> listLecture(String classId); |
| | | |
| | | /** |
| | | * 读取课件真实文件访问路径 |
| | | * 读取课件真实文件访问路径 |
| | | * |
| | | * @param lectureId |
| | | * 课件id数组 |
| | | * 课件id数组 |
| | | * @param attribute |
| | | * 课件附加属性 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{"type":"",path:""}} |
| | | * 课件附加属性 |
| | | * @return 上传结果:{"success":true,msg:"success",attrs:{"type":"",path:""}} |
| | | */ |
| | | Result readLectureAccessPath(String lectureId, String attribute); |
| | | |
| | | /** |
| | | * 通过id读取班级的课件对象 |
| | | * 通过id读取班级的课件对象 |
| | | */ |
| | | ClsSubjectLecture readClsLecture(String id); |
| | | |
| | | /** |
| | | * 读取课件目录 |
| | | * 读取课件目录 |
| | | * |
| | | * @param chapterId |
| | | * @return |
| | |
| | | ClsSubjectChapter readChapter(String chapterId); |
| | | |
| | | /** |
| | | * 课件列表大小 |
| | | * 课件列表大小 |
| | | * |
| | | * @param chapterId |
| | | * 章节id |
| | | * 章节id |
| | | * @param keyword |
| | | * 关键字 |
| | | * 关键字 |
| | | * @param type |
| | | * 类型 |
| | | * 类型 |
| | | * @return |
| | | */ |
| | | int listLectureCount(String chapterId, String keyword, String type); |
| | | |
| | | /** |
| | | * 返回下级章节文件夹列表 |
| | | * 返回下级章节文件夹列表 |
| | | * |
| | | * @param classId |
| | | * 班级id |
| | | * 班级id |
| | | * @param classId |
| | | * 课程id |
| | | * 课程id |
| | | * @param parentChapterId |
| | | * 父级章节文件夹id |
| | | * @return 返回章节列表 |
| | | * 父级章节文件夹id |
| | | * @return 返回章节列表 |
| | | */ |
| | | List<ClsSubjectChapter> getListChapter(String classId,String subjectId, String parentChapterId); |
| | | |
| | | /** |
| | | * 返回下级章节文件夹列表,如果 |
| | | * 返回下级章节文件夹列表,如果 |
| | | * |
| | | * @param classId |
| | | * 班级id |
| | | * 班级id |
| | | * @param subjectId |
| | | * 课程id |
| | | * 课程id |
| | | * @param parentChapterId |
| | | * 父级章节文件夹id |
| | | * @return 返回章节列表 |
| | | * 父级章节文件夹id |
| | | * @return 返回章节列表 |
| | | */ |
| | | List<ClsSubjectChapter> doGetListChapter(String classId,String subjectId, String parentChapterId); |
| | | |
| | | /** |
| | | * 把课程上的课件拷贝到班级课程 |
| | | * 把课程上的课件拷贝到班级课程 |
| | | * |
| | | * @param subjectId |
| | | * 课程id |
| | | * 课程id |
| | | * @param classId |
| | | * 班级id |
| | | * 班级id |
| | | * @return |
| | | */ |
| | | Result doCopyLecturesToClass(String origSubjectId, String subjectId, String classId); |
| | | |
| | | |
| | | /** |
| | | * 清理所有的班级课件 |
| | | * 清理所有的班级课件 |
| | | * @param subjectId |
| | | * @param classId |
| | | * @return |
| | |
| | | Result doClearLecturesToClass(String subjectId, String classId); |
| | | |
| | | /** |
| | | * 根据课程查询课件 |
| | | * 根据课程查询课件 |
| | | * |
| | | * @param subjectId |
| | | * @param type |
| | |
| | | List<Map<String, Object>> listLectureBySubject(String subjectId, String type, String classId); |
| | | |
| | | /** |
| | | * 查询班级内的课件和课程 |
| | | * 查询班级内的课件和课程 |
| | | * |
| | | * @param classId |
| | | * @return |
| | |
| | | Result listSubjectLecture(String classId, String sort, Pager pager); |
| | | |
| | | /** |
| | | * 获取课程下的课件 |
| | | * 获取课程下的课件 |
| | | * |
| | | * @param subjectId |
| | | * @param type |
| | |
| | | public Map<String,Object> listLectureBySubjectOrderCreateTime(String subjectId, String classId, String sort, Pager pager); |
| | | |
| | | /** |
| | | * 学员端获取课程下课件 |
| | | * 学员端获取课程下课件 |
| | | * |
| | | * @param subjectId |
| | | * @param type |
| | |
| | | public List<Map<String, Object>> listStuLectureBySubject(String subjectId, String classId); |
| | | |
| | | /** |
| | | * 学员端获取课程下课件数量 |
| | | * 学员端获取课程下课件数量 |
| | | * |
| | | * @param subjectId |
| | | * @param type |
| | |
| | | public long stuLectureCountBySubject(String subjectId, String classId); |
| | | |
| | | /** |
| | | * 获取章节下的课件 |
| | | * 获取章节下的课件 |
| | | * |
| | | * @param chapterLst |
| | | * @param lectures |
| | |
| | | public List<ClsSubjectChapter> getChapterLectures(List<ClsSubjectChapter> chapterLst, List<Map<String, Object>> lectures); |
| | | |
| | | /** |
| | | * 获取文档页码 |
| | | * 获取文档页码 |
| | | * |
| | | * @param resItemId |
| | | * @return |
| | |
| | | public int readDocPageCount(String resItemId); |
| | | |
| | | /** |
| | | * 公开课课件 |
| | | * 公开课课件 |
| | | * |
| | | * @param subjectId |
| | | * @param classId |
| | |
| | | public Map<String,Object> listOpenLectureBySubjectOrderCreateTime(String subjectId, String sort, Pager pager); |
| | | |
| | | /** |
| | | * 课件按目录分类 |
| | | * 课件按目录分类 |
| | | * |
| | | * @param classId |
| | | * @param subjectId |
| | |
| | | * @return |
| | | */ |
| | | public Result coursewareChapterList(String classId,String subjectId, String type); |
| | | } |
| | | } |
| | |
| | | public interface IDetailProgressService { |
| | | |
| | | /** |
| | | * 新增学习记录 |
| | | * @param type 进度类型 |
| | | * @param targetId 学习目标id |
| | | * @param learnerId 学习者id |
| | | * @param start 学习开始位置 |
| | | * @param end 学习结束位置 |
| | | * 新增学习记录 |
| | | * @param type 进度类型 |
| | | * @param targetId 学习目标id |
| | | * @param learnerId 学习者id |
| | | * @param start 学习开始位置 |
| | | * @param end 学习结束位置 |
| | | * @return |
| | | */ |
| | | Result addProgress(String targetId,String learnerId,int start,int end); |
| | | |
| | | /** |
| | | * 返回进度类型 |
| | | * 返回进度类型 |
| | | * @return |
| | | */ |
| | | String getType(); |
| | |
| | | public interface IProgressService { |
| | | |
| | | /** |
| | | * 查询学习进度 |
| | | * 查询学习进度 |
| | | * |
| | | * @return |
| | | */ |
| | | List<Progress> query(String type, String learnerId, List<String> targetId); |
| | | |
| | | /** |
| | | * 查询学习进度 |
| | | * 查询学习进度 |
| | | * |
| | | * @return |
| | | */ |
| | | List<Progress> query(String type, List<String> learnerId, String targetId); |
| | | |
| | | /** |
| | | * 查询学习记录 |
| | | * 查询学习记录 |
| | | * |
| | | * @param type |
| | | * 进度类型 |
| | | * 进度类型 |
| | | * @param targetId |
| | | * 学习目标id |
| | | * 学习目标id |
| | | * @param learnerId |
| | | * 学习者id |
| | | * 学习者id |
| | | * @return |
| | | */ |
| | | Progress query(String type, String targetId, String learnerId); |
| | | |
| | | /** |
| | | * 新增学习记录 |
| | | * 新增学习记录 |
| | | * |
| | | * @param type |
| | | * 进度类型 |
| | | * 进度类型 |
| | | * @param targetId |
| | | * 学习目标id |
| | | * 学习目标id |
| | | * @param start |
| | | * 学习开始位置 |
| | | * 学习开始位置 |
| | | * @param end |
| | | * 学习结束位置 |
| | | * 学习结束位置 |
| | | * @return |
| | | */ |
| | | Result addProgress(String type, String targetId, int start, int end, String userId); |
| | |
| | | ProgressDAO dao; |
| | | |
| | | /** |
| | | * 各类型课件进度服务实现 |
| | | * 各类型课件进度服务实现 |
| | | */ |
| | | private Map<String, IDetailProgressService> resItemServiceMap = new HashMap<String, IDetailProgressService>(6); |
| | | |
| | |
| | | save(progress); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("保存异常", e); |
| | | log.error("保存异常", e); |
| | | return; |
| | | } |
| | | |
| | |
| | | IClassLectureService lectureService; |
| | | |
| | | /** |
| | | * 各类型课件进度服务实现 |
| | | * 各类型课件进度服务实现 |
| | | */ |
| | | private Map<String, IDetailProgressService> resItemServiceMap = new HashMap<String, IDetailProgressService>(6); |
| | | |
| | |
| | | updateProgress(targetId, p, sum); |
| | | } |
| | | |
| | | //保存学习记录明细 |
| | | //保存学习记录明细 |
| | | this.saveProgressDetail(start, end, targetId, p.getProgressId(), learnerId); |
| | | |
| | | classLectureService.updateLecturetime(targetId); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存学习记录明细 |
| | | * 保存学习记录明细 |
| | | * |
| | | * @param start |
| | | * @param end |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取进度百分比 |
| | | * 获取进度百分比 |
| | | * |
| | | * @param targetId |
| | | * @param sum |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取进度百分比 |
| | | * 获取进度百分比 |
| | | * |
| | | * @param targetId |
| | | * @param sum |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取进度百分比 |
| | | * 获取进度百分比 |
| | | * |
| | | * @param targetId |
| | | * @param sum |
| | |
| | | package com.qxueyou.scc.controller; |
| | | |
| | | |
| | | import cn.hutool.core.io.FileUtil; |
| | | import cn.hutool.core.io.IoUtil; |
| | | import cn.hutool.core.util.ArrayUtil; |
| | |
| | | |
| | | //import cn.hutool.core.io.FileUtil; |
| | | import com.obs.services.exception.ObsException; |
| | | import com.obs.services.model.PutObjectResult; |
| | | import com.qxueyou.scc.base.model.FileMeta; |
| | | import com.qxueyou.scc.base.model.Result; |
| | | import com.qxueyou.scc.teach.res.service.HweiYunOBSService; |
| | | import org.springframework.util.ObjectUtils; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | |
| | | import java.io.InputStream; |
| | | import java.net.URLEncoder; |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * @ClassName: ObsController |
| | | * @Description: OBS服务器Controller |
| | |
| | | * @Version: 1.0 |
| | | */ |
| | | @RestController |
| | | @RequestMapping({ "file" })// @RequestMapping("/file") |
| | | @RequestMapping("/file")// @RequestMapping("/file") |
| | | public class HweiYunOBSController { |
| | | |
| | | |
| | | @Resource |
| | | private HweiYunOBSService hweiYunOBSService; |
| | | |
| | | |
| | | @RequestMapping(value = "upload", method = RequestMethod.POST) |
| | | public Result save(@RequestParam(value = "file", required = false) MultipartFile file) { |
| | | |
| | |
| | | // if (FileUtil.isEmpty(file)) { |
| | | // return new Result(false,"文件为空"); |
| | | // } |
| | | final String test = hweiYunOBSService.fileUpload(file, file.getOriginalFilename()); |
| | | final List<FileMeta> test = hweiYunOBSService.fileUpload(file, file.getOriginalFilename()); |
| | | // return ResponseVO.ok("执行成功",test); |
| | | return new Result(true,"success",test); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "delete", method = RequestMethod.POST) |
| | | public Result delete(@RequestParam(value = "fileName", required = false) String fileName) { |
| | | if (StrUtil.isEmpty(fileName)) { |
| | |
| | | final boolean delete = hweiYunOBSService.delete(fileName); |
| | | return delete?new Result(true,"success"):new Result(false,"删除失败"); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "deletes", method = RequestMethod.POST) |
| | | //@RequestParam 获取List,数组则不需要 |
| | | public Result delete(@RequestParam("fileNames") List<String> fileNames) { |
| | |
| | | final boolean delete = hweiYunOBSService.delete(fileNames); |
| | | return delete?new Result(true,"success"):new Result(false,"删除失败"); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | @RequestMapping(value = "download", method = RequestMethod.POST) |
| | | public Result download(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "fileName", required = false) String fileName) { |
| | | if (StrUtil.isEmpty(fileName)) { |
| | |
| | | return new Result(false); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | public void setM3u8KeyPath(String m3u8KeyPath) { |
| | | this.m3u8KeyPath = m3u8KeyPath; |
| | | } |
| | | } |
| | | } |
| | |
| | | public static Float getMp3Duration(String filePath){ |
| | | |
| | | try { |
| | | File mp3File = new File(filePath); |
| | | File file = File.createTempFile("temp", ".mp3"); //创建临时文件 |
| | | Image2Binary.toBDFile(filePath,file.getCanonicalPath()); |
| | | File mp3File = new File(file.getPath()); |
| | | MP3File f = (MP3File) AudioFileIO.read(mp3File); |
| | | MP3AudioHeader audioHeader = (MP3AudioHeader)f.getAudioHeader(); |
| | | return Float.parseFloat(audioHeader.getTrackLength()+""); |
New file |
| | |
| | | package com.qxueyou.scc.sys.utils; |
| | | |
| | | import java.io.ByteArrayOutputStream; |
| | | import java.io.DataInputStream; |
| | | import java.io.FileInputStream; |
| | | import java.io.FileOutputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.net.HttpURLConnection; |
| | | import java.net.MalformedURLException; |
| | | import java.net.URL; |
| | | import java.net.UnknownHostException; |
| | | |
| | | import org.apache.commons.codec.digest.DigestUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | |
| | | public class Image2Binary |
| | | { |
| | | private static Logger log = LoggerFactory.getLogger(Image2Binary.class); |
| | | |
| | | public static byte[] toByteArray(InputStream in) throws IOException { |
| | | |
| | | ByteArrayOutputStream out=new ByteArrayOutputStream(); |
| | | byte[] buffer=new byte[1024*4]; |
| | | int n=0; |
| | | while ( (n=in.read(buffer)) !=-1) { |
| | | out.write(buffer,0,n); |
| | | } |
| | | return out.toByteArray(); |
| | | } |
| | | |
| | | /** |
| | | * 网络文件转换为byte二进制 |
| | | * @Title: toByteArray |
| | | * @Description: TODO(这里用一句话描述这个方法的作用) |
| | | * @param @param url |
| | | * @param @return |
| | | * @param @throws IOException 设定文件 |
| | | * @return byte[] 返回类型 |
| | | * @throws |
| | | */ |
| | | public static byte[] toByteArray(String urlStr) throws IOException { |
| | | URL url = new URL(urlStr); |
| | | HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
| | | DataInputStream in = new DataInputStream(conn.getInputStream()); |
| | | ByteArrayOutputStream out=new ByteArrayOutputStream(); |
| | | byte[] buffer=new byte[1024*4]; |
| | | int n=0; |
| | | while ( (n=in.read(buffer)) !=-1) { |
| | | out.write(buffer,0,n); |
| | | } |
| | | return out.toByteArray(); |
| | | } |
| | | |
| | | /** |
| | | * @throws IOException |
| | | * @throws MalformedURLException |
| | | * 网络文件转换为本地文件 |
| | | * @Title: toByteArray |
| | | * @Description: TODO(这里用一句话描述这个方法的作用) |
| | | * @param @param url |
| | | * @param @return |
| | | * @param @throws IOException 设定文件 |
| | | * @return byte[] 返回类型 |
| | | * @throws |
| | | */ |
| | | public static void toBDFile(String urlStr, String bdUrl) throws IOException,UnknownHostException{ |
| | | URL url = new URL(urlStr); |
| | | HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
| | | DataInputStream in = new DataInputStream(conn.getInputStream()); |
| | | byte[] data=toByteArray(in); |
| | | in.close(); |
| | | FileOutputStream out=new FileOutputStream(bdUrl); |
| | | out.write(data); |
| | | out.close(); |
| | | } |
| | | |
| | | /** |
| | | * 直接获取网络文件的md5值 |
| | | * @param urlStr |
| | | * @return |
| | | */ |
| | | public static String getMd5ByUrl(String urlStr){ |
| | | String md5 = null; |
| | | try { |
| | | URL url = new URL(urlStr); |
| | | HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
| | | DataInputStream in = new DataInputStream(conn.getInputStream()); |
| | | md5 = DigestUtils.md5Hex(in); |
| | | } catch (IOException e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | } |
| | | return md5; |
| | | } |
| | | |
| | | /** |
| | | * 获取网络文件的输入流 |
| | | * @param urlStr |
| | | * @return |
| | | */ |
| | | public static InputStream getInputStreamByUrl(String urlStr){ |
| | | DataInputStream in = null; |
| | | try { |
| | | URL url = new URL(urlStr); |
| | | HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
| | | in = new DataInputStream(conn.getInputStream()); |
| | | } catch (IOException e) { |
| | | log.error("url转换输入流失败,错误信息{}",e.getMessage()); |
| | | } |
| | | return in; |
| | | } |
| | | |
| | | |
| | | public static void main(String[] args) |
| | | { |
| | | // try { |
| | | // toBDFile("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1496324940814&di=1d70e0de447be6547c372718b9b30ff6&imgtype=0&src=http%3A%2F%2Fimage.tianjimedia.com%2FuploadImages%2F2015%2F204%2F22%2FYMG9CAUWUM15.jpg","E://a.jpg"); |
| | | // } catch (IOException e) { |
| | | // // TODO Auto-generated catch block |
| | | // e.printStackTrace(); |
| | | // } |
| | | String a = getMd5ByUrl("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1496324940814&di=1d70e0de447be6547c372718b9b30ff6&imgtype=0&src=http%3A%2F%2Fimage.tianjimedia.com%2FuploadImages%2F2015%2F204%2F22%2FYMG9CAUWUM15.jpg"); |
| | | System.out.println(a); |
| | | } |
| | | } |
| | |
| | | |
| | | import com.coremedia.iso.IsoFile; |
| | | |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | |
| | | |
| | |
| | | * @return 单位为毫秒 |
| | | */ |
| | | public static long getMp4Duration(String videoPath) throws IOException { |
| | | IsoFile isoFile = new IsoFile(videoPath); |
| | | long lengthInSeconds = |
| | | isoFile.getMovieBox().getMovieHeaderBox().getDuration() / |
| | | isoFile.getMovieBox().getMovieHeaderBox().getTimescale(); |
| | | return lengthInSeconds; |
| | | try { |
| | | File file = File.createTempFile("temp", ".mp4"); //创建临时文件 |
| | | Image2Binary.toBDFile(videoPath,file.getCanonicalPath()); |
| | | IsoFile isoFile = new IsoFile(file.getPath()); |
| | | long lengthInSeconds = |
| | | isoFile.getMovieBox().getMovieHeaderBox().getDuration() / |
| | | isoFile.getMovieBox().getMovieHeaderBox().getTimescale(); |
| | | return lengthInSeconds; |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | package com.qxueyou.scc.teach.res.service; |
| | | |
| | | |
| | | import com.obs.services.model.PutObjectResult; |
| | | import com.qxueyou.scc.base.model.FileMeta; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | |
| | | import java.io.InputStream; |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * @Description 华为云OBS服务接口 |
| | | * @author wuhuiju |
| | | * @date 2022/12/2 17:01 |
| | | */ |
| | | public interface HweiYunOBSService { |
| | | |
| | | |
| | | /** |
| | | * @Description 删除文件 |
| | | * @author wuhuiju |
| | |
| | | * @return: boolean 执行结果 |
| | | */ |
| | | boolean delete(String objectKey); |
| | | |
| | | |
| | | /** |
| | | * @Description 批量删除文件 |
| | | * @author wuhuiju |
| | |
| | | * @return: boolean 执行结果 |
| | | */ |
| | | boolean delete(List<String> objectKeys); |
| | | |
| | | |
| | | /** |
| | | * @Description 上传文件 |
| | | * @author wuhuiju |
| | |
| | | * @param: objectKey 文件名称 |
| | | * @return: java.lang.String url访问路径 |
| | | */ |
| | | String fileUpload(MultipartFile uploadFile, String objectKey); |
| | | |
| | | List<FileMeta> fileUpload(MultipartFile uploadFile, String objectKey); |
| | | |
| | | /** |
| | | * @Description 文件下载 |
| | | * @author wuhuiju |
| | |
| | | */ |
| | | InputStream fileDownload(String objectKey); |
| | | } |
| | | |
| | |
| | | |
| | | /** |
| | | * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法 |
| | | * |
| | | * |
| | | * @author xiadehu |
| | | * |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 插入文件信息到数据库 |
| | | * |
| | | * |
| | | * @param name |
| | | * @param fullPath |
| | | * 全路径 |
| | |
| | | * 文件类型,非文件格式 |
| | | * @return |
| | | */ |
| | | private ResFile insertFileToDB(String name, String fullPath, String relativePath, String type) { |
| | | public ResFile insertFileToDB(String name, String fullPath, String relativePath, String type) { |
| | | |
| | | ResFile file = new ResFile(); |
| | | |
| | |
| | | return file; |
| | | |
| | | } |
| | | /** |
| | | * 插入文件信息到数据库 |
| | | * |
| | | * @param name |
| | | * @param relativePath |
| | | * 相对路径 |
| | | * @param type |
| | | * 文件类型,非文件格式 |
| | | * @return |
| | | */ |
| | | public ResFile insertFileToDBTwo(String name, Long Size, String relativePath, String type) { |
| | | |
| | | ResFile file = new ResFile(); |
| | | |
| | | TraceUtils.setCreateTrace(file); |
| | | file.setFileName(name); |
| | | file.setFileFormat(QFileUtils.getFileFormat(name)); |
| | | file.setFileType(type); |
| | | // TODO |
| | | file.setMd5Hash(null); |
| | | file.setPath(relativePath); |
| | | file.setSize(Size); |
| | | // TODO |
| | | file.setTenantId(null); |
| | | file.setDeleteFlag(false); |
| | | |
| | | save(file); |
| | | |
| | | return file; |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 获取文件类型 |
| | | * |
| | | * |
| | | * @param name |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 获取文件目标路径 |
| | | * |
| | | * |
| | | * @param name |
| | | * @return |
| | | */ |
| | |
| | | package com.qxueyou.scc.teach.res.service.impl; |
| | | |
| | | |
| | | //import com.example.study.springboot.background.service.HweiYunOBSService; |
| | | //import com.example.study.springboot.config.HweiOBSConfig; |
| | | import com.obs.services.ObsClient; |
| | | import com.obs.services.exception.ObsException; |
| | | import com.obs.services.model.*; |
| | | import com.qxueyou.scc.base.model.FileMeta; |
| | | import com.qxueyou.scc.base.model.Result; |
| | | import com.qxueyou.scc.base.util.CollectionUtils; |
| | | import com.qxueyou.scc.base.util.QFileUtils; |
| | | import com.qxueyou.scc.base.util.UUIDUtils; |
| | | import com.qxueyou.scc.config.HweiOBSConfig; |
| | | import com.qxueyou.scc.teach.res.model.ResFile; |
| | | import com.qxueyou.scc.teach.res.service.HweiYunOBSService; |
| | | import com.qxueyou.scc.teach.res.service.IFileService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.catalina.core.ApplicationPart; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.logging.log4j.LogManager; |
| | | import org.apache.logging.log4j.Logger; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.util.Calendar; |
| | | import java.util.GregorianCalendar; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * @ClassName: HweiYunOBSServiceImpl |
| | |
| | | private final Logger log = LogManager.getLogger(HweiYunOBSServiceImpl.class); |
| | | @Autowired |
| | | private HweiOBSConfig hweiOBSConfig; |
| | | |
| | | @Autowired |
| | | FileService fileService; |
| | | |
| | | public final static String FILE_TYPE_VIDEO = "video"; |
| | | |
| | |
| | | "JPG", FILE_TYPE_IMG,"JPEG", FILE_TYPE_IMG, "GIF", FILE_TYPE_IMG, "BMP", FILE_TYPE_IMG, "PNG", FILE_TYPE_IMG |
| | | |
| | | ); |
| | | |
| | | |
| | | @Override |
| | | public boolean delete(String objectKey) { |
| | | ObsClient obsClient = null; |
| | |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public boolean delete(List<String> objectKeys) { |
| | | ObsClient obsClient = null; |
| | |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public String fileUpload(MultipartFile uploadFile, String objectKey) { |
| | | public List<FileMeta> fileUpload(MultipartFile uploadFile, String objectKey) { |
| | | ObsClient obsClient = null; |
| | | List<FileMeta> files = new ArrayList<FileMeta>(2); |
| | | FileMeta fileMeta = null; |
| | | try { |
| | | String destPath = getDestPath(objectKey); |
| | | String bucketName = hweiOBSConfig.getBucketName(); |
| | |
| | | // 设置对象访问权限为公共读 |
| | | request.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ); |
| | | PutObjectResult result = obsClient.putObject(request); |
| | | |
| | | fileMeta = new FileMeta(); |
| | | ResFile file = fileService.insertFileToDBTwo(objectKey, uploadFile.getSize(), result.getObjectUrl(), uploadFile.getContentType()); |
| | | fileMeta.setFileId(file.getFileId()); |
| | | fileMeta.setPath(result.getObjectUrl()); |
| | | fileMeta.setFileSize(uploadFile.getSize() / 1024 + "kb"); |
| | | fileMeta.setFileType(uploadFile.getContentType()); |
| | | fileMeta.setFileName(objectKey); |
| | | files.add(fileMeta); |
| | | // 读取该已上传对象的URL |
| | | log.info("已上传对象的URL" + result.getObjectUrl()); |
| | | return result.getObjectUrl(); |
| | | return files; |
| | | // return result.getObjectUrl(); |
| | | } catch (ObsException e) { |
| | | log.error("obs上传失败", e); |
| | | } catch (IOException e) { |
| | |
| | | } |
| | | return null; |
| | | } |
| | | } |
| | | } |
| | |
| | | import java.io.File; |
| | | import java.util.Date; |
| | | |
| | | import com.obs.services.ObsClient; |
| | | import com.obs.services.model.ObsObject; |
| | | import com.qxueyou.scc.sys.utils.VideoUtil; |
| | | import org.apache.commons.io.FileUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | |
| | | @Autowired |
| | | ICacheService cacheService; |
| | | |
| | | @Value("${scc.resRootPath}") |
| | | String resRootPath; |
| | | |
| | | @Override |
| | | public String add(String fileId, String name) { |
| | |
| | | TraceUtils.setCreateTrace(resVideo); |
| | | try { |
| | | resVideo.setFileId(fileId); |
| | | resVideo.setPlayTime((int) VideoUtil.getMp4Duration(resRootPath +"/"+ file.getPath())); |
| | | resVideo.setPlayTime((int) VideoUtil.getMp4Duration(file.getPath())); |
| | | resVideo.setName(name); |
| | | resVideo.setMediaVideoId(mediaVideoId); |
| | | resVideo.setStatus(ResItemVideo.STATUS_LINEUP); |
| | |
| | | |
| | | try { |
| | | video.setDeleteFlag(false); |
| | | video.setPlayTime((int) VideoUtil.getMp4Duration(resRootPath +"/"+ file.getPath())); |
| | | video.setPlayTime((int) VideoUtil.getMp4Duration(file.getPath())); |
| | | video.setName(file.getFileName()); |
| | | video.setOrigUrl(file.getPath()); |
| | | video.setStatus(MediaVideo.STATUS_LINEUP); |