easegen-front/.env.prod
@@ -1,12 +1,12 @@ # ç产ç¯å¢ï¼åªå¨æå æ¶ä½¿ç¨ NODE_ENV=production # æ¬å°å¼åç¯å¢ï¼æ¬å°å¯å¨ææé¡¹ç®ï¼å端ãå端ãAPPï¼æ¶ä½¿ç¨ï¼ä¸ä¾èµå¤é¨ç¯å¢ NODE_ENV=development VITE_DEV=false VITE_DEV=true # 请æ±è·¯å¾ VITE_BASE_URL='http://127.0.0.1:48080' VITE_BASE_URL='' # æä»¶ä¸ä¼ ç±»åï¼server - å端ä¸ä¼ ï¼ client - å端ç´è¿ä¸ä¼ ï¼ä» æ¯æS3æå¡ # æä»¶ä¸ä¼ ç±»åï¼server - å端ä¸ä¼ ï¼ client - å端ç´è¿ä¸ä¼ ï¼ä» æ¯æ S3 æå¡ VITE_UPLOAD_TYPE=server # ä¸ä¼ è·¯å¾ VITE_UPLOAD_URL='http://127.0.0.1:48080/admin-api/infra/file/upload' @@ -15,10 +15,10 @@ VITE_API_URL=/admin-api # æ¯å¦å é¤debugger VITE_DROP_DEBUGGER=true VITE_DROP_DEBUGGER=false # æ¯å¦å é¤console.log VITE_DROP_CONSOLE=true VITE_DROP_CONSOLE=false # æ¯å¦sourcemap VITE_SOURCEMAP=false @@ -26,8 +26,8 @@ # æå è·¯å¾ VITE_BASE_PATH=/ # è¾åºè·¯å¾ VITE_OUT_DIR=dist-prod # ååH5ä¼å端åå VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn' VITE_MALL_H5_DOMAIN='http://192.168.3.159:3000' # éªè¯ç çå¼å ³ VITE_APP_CAPTCHA_ENABLE=false easegen-front/vite.config.ts
@@ -35,10 +35,10 @@ host: "0.0.0.0", open: env.VITE_OPEN === 'true', /* headers: { "Cross-Origin-Opener-Policy": "same-origin", // ä¿æ¤ä½ çæºç«ç¹å åæ»å» "Cross-Origin-Embedder-Policy": "require-corp", // ä¿æ¤å害è å åä½ çæºç«ç¹çå½±å }, */ // headers: { // "Cross-Origin-Opener-Policy": "same-origin", // ä¿æ¤ä½ çæºç«ç¹å åæ»å» // "Cross-Origin-Embedder-Policy": "require-corp", // ä¿æ¤å害è å åä½ çæºç«ç¹çå½±å // }, // æ¬å°è·¨å代ç. ç®å注éçåå ï¼ææ¶æ²¡æç¨éï¼server ç«¯å·²ç»æ¯æè·¨å // proxy: { // ['/admin-api']: { yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/CourseMediaController.java
@@ -6,10 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaMegerVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaPageReqVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaRespVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaSaveReqVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.*; import cn.iocoder.yudao.module.digitalcourse.controller.admin.courses.vo.AppCoursesUpdateReqVO; import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.coursemedia.CourseMediaDO; import cn.iocoder.yudao.module.digitalcourse.service.coursemedia.CourseMediaService; @@ -114,4 +111,24 @@ return courseMediaService.reMegerMedia(mediaMegerVO); } } /** * çæåå¹ */ @PostMapping("/createSubtitles") public CommonResult createSubtitles(@RequestBody CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO){ return courseMediaService.createSubtitles(courseMediaSubtitlesReqVO); } /** * çæå¸¦åå¹è§é¢ */ @PostMapping("/createSubtitlesVideo") public CommonResult createSubtitlesVideo(@RequestBody CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO){ return courseMediaService.createSubtitlesVideo(courseMediaSubtitlesReqVO); } @PutMapping("/updateSubtitles") public CommonResult<Boolean> updateSubtitles(@Valid @RequestBody CourseMediaEditSReqVO updateReqVO) { courseMediaService.updateSubtitles(updateReqVO); return success(true); } } yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaEditSReqVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; @Schema(description = "管çåå° - ä¿®æ¹åå¹å°å Request VO") @Data public class CourseMediaEditSReqVO { @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "12757") private Long id; private String subtitlesUrl; } yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaRespVO.java
@@ -75,4 +75,12 @@ @Schema(description = "èæ¯å¾ç") private String thumbnail; } @Schema(description = "å广件çæç¶æ1åæä¸ï¼2æåï¼3失败") private Integer subtitlesStatus; @Schema(description = "è§é¢æ·»å åå¹ç¶æ1æ·»å ä¸ï¼2æåï¼3失败") private Integer subtitlesAddStatus; @Schema(description = "带å广件çè§é¢å°å") private String videoUrl; @Schema(description = "åå¹è¯è¨") private String lang; } yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaSaveReqVO.java
@@ -42,4 +42,6 @@ @Schema(description = "èæ¯å¾ç") private String thumbnail; } } yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaSubtitlesReqVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; @Schema(description = "管çåå° - 课ç¨åªä½åå¹ Request VO") @Data public class CourseMediaSubtitlesReqVO { @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "12757") private Long id; @Schema(description = "å广件å°å") private String subtitlesUrl; @Schema(description = "å广件çæç¶æ1åæä¸ï¼2æåï¼3失败") private Integer subtitlesStatus; @Schema(description = "è§é¢æ·»å åå¹ç¶æ1æ·»å ä¸ï¼2æåï¼3失败") private Integer subtitlesAddStatus; @Schema(description = "带å广件çè§é¢å°å") private String videoUrl; private String lang; private String sentenceGap; } yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/coursemedia/CourseMediaDO.java
@@ -93,4 +93,9 @@ * é¢ä¼°æéæ£é¤ç积å * */ private Integer expectedReducePoint; } private Integer subtitlesStatus; private Integer subtitlesAddStatus; private String videoUrl; private String lang; } yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaService.java
@@ -2,9 +2,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaMegerVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaPageReqVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaSaveReqVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.*; import cn.iocoder.yudao.module.digitalcourse.controller.admin.courses.vo.AppCoursesUpdateReqVO; import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.coursemedia.CourseMediaDO; import jakarta.validation.Valid; @@ -60,4 +58,9 @@ CommonResult reMegerMedia(CourseMediaMegerVO updateReqVO); } CommonResult createSubtitles(CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO); CommonResult createSubtitlesVideo(CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO); void updateSubtitles(CourseMediaEditSReqVO updateReqVO); } yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceImpl.java
@@ -4,9 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaMegerVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaPageReqVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaSaveReqVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.*; import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.coursemedia.CourseMediaDO; import cn.iocoder.yudao.module.digitalcourse.dal.mysql.coursemedia.CourseMediaMapper; import cn.iocoder.yudao.module.digitalcourse.manager.MediaTaskManager; @@ -136,6 +134,42 @@ } @Override public CommonResult createSubtitles(CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO) { CourseMediaDO courseMediaDO1 = courseMediaMapper.selectOne(new QueryWrapperX<CourseMediaDO>().lambda().eq(CourseMediaDO::getId, courseMediaSubtitlesReqVO.getId())); if (courseMediaDO1.getSubtitlesStatus()!= null && courseMediaDO1.getSubtitlesStatus() == 1) { throw new RuntimeException("åå¹çæä¸ï¼è¯·å¿éå¤æäº¤"); } CourseMediaDO courseMediaDO = new CourseMediaDO(); courseMediaDO.setId(courseMediaSubtitlesReqVO.getId()); courseMediaDO.setSubtitlesStatus(1); courseMediaMapper.updateById(courseMediaDO); courseMediaServiceUtil.createSubtitles(courseMediaSubtitlesReqVO); return CommonResult.success("è§é¢åå¹çæä¸ï¼è¯·ç¨åæ¥ç"); } @Override public CommonResult createSubtitlesVideo(CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO) { CourseMediaDO courseMediaDO1 = courseMediaMapper.selectOne(new QueryWrapperX<CourseMediaDO>().lambda().eq(CourseMediaDO::getId, courseMediaSubtitlesReqVO.getId()).eq(CourseMediaDO::getSubtitlesStatus, 2)); if (courseMediaDO1 == null) { return CommonResult.error(BAD_REQUEST.getCode(), "å广件ä¸å卿æªçæ"); } CourseMediaDO courseMediaDO = new CourseMediaDO(); courseMediaDO.setCourseId(courseMediaSubtitlesReqVO.getId()); courseMediaDO.setSubtitlesAddStatus(1); courseMediaMapper.updateById(courseMediaDO); courseMediaServiceUtil.createSubtitlesVideo(courseMediaDO1); return CommonResult.success("è§é¢æ·»å åå¹ä¸ï¼è¯·ç¨åæ¥ç"); } @Override public void updateSubtitles(CourseMediaEditSReqVO updateReqVO) { // æ ¡éªåå¨ validateCourseMediaExists(updateReqVO.getId()); // æ´æ° CourseMediaDO updateObj = BeanUtils.toBean(updateReqVO, CourseMediaDO.class); updateObj.setSubtitlesStatus(2); courseMediaMapper.updateById(updateObj); } } yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java
@@ -3,10 +3,12 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpException; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaMegerVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursemedia.vo.CourseMediaSubtitlesReqVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursescenecomponents.vo.AppCourseSceneComponentsMegerReqVO; import cn.iocoder.yudao.module.digitalcourse.controller.admin.coursescenes.vo.AppCourseScenesMegerReqVO; import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.coursemedia.CourseMediaDO; @@ -21,6 +23,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; @@ -33,6 +36,7 @@ import java.math.RoundingMode; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.text.SimpleDateFormat; import java.time.LocalDateTime; @@ -50,6 +54,11 @@ static final String EASEGEN_CORE_KEY = "easegen.core.key"; static final String SUBTITLES_URL = "subtitles.url"; private static final String EASEGEN_URL = "easegen.url"; private static final String SUBTITLES = "subtitles"; private static final String F2F = "f2f"; private static final String HEYGEM_FACE2FACE = "heygem.face2face"; @Resource private CourseMediaMapper courseMediaMapper; @@ -74,7 +83,7 @@ * @return */ public void remoteMegerMedia(CourseMediaMegerVO updateReqVO) { FileUtil.clean("D:/heygem_data/face2face/temp/"); FileUtil.clean(configApi.getConfigValueByKey(HEYGEM_FACE2FACE) +"/temp/"); CourseMediaDO courseMediaDO = courseMediaMapper.selectById(updateReqVO.getCourseMediaId()); courseMediaDO.setStatus(1); courseMediaMapper.updateById(courseMediaDO); @@ -109,15 +118,15 @@ // æåé³é¢æä»¶åï¼è·¯å¾çæåä¸é¨åï¼ String substring = configApi.getConfigValueByKey("easegen.url") + audition.substring(audition.lastIndexOf("/")); String fileName = audition.substring(audition.lastIndexOf('/') + 1); String newFileName = "D:/heygem_data/face2face/temp/" + fileName; String newFileName = configApi.getConfigValueByKey(HEYGEM_FACE2FACE) +"/temp/" + fileName; // æåè§é¢æä»¶åï¼è·¯å¾çæåä¸é¨åï¼ String substring1 = configApi.getConfigValueByKey("easegen.url") + digitalHumansDO.getFixVideoUrl().substring(digitalHumansDO.getFixVideoUrl().lastIndexOf("/")); String fileName1 = digitalHumansDO.getFixVideoUrl().substring(digitalHumansDO.getFixVideoUrl().lastIndexOf('/') + 1); String newFileName1 = "D:/heygem_data/face2face/temp/"+fileName1; String newFileName1 = configApi.getConfigValueByKey(HEYGEM_FACE2FACE) +"/temp/"+fileName1; //è·åæ¶é´æ³ Date date = new Date(); long timestamp = date.getTime(); String newFileName2 = "D:/heygem_data/face2face/temp/"+timestamp+".mp4"; String newFileName2 = configApi.getConfigValueByKey(HEYGEM_FACE2FACE) +"/temp/"+timestamp+".mp4"; //è·åPPTå 容 String cover = scene.getComponents().get(1).getSrc(); cover = configApi.getConfigValueByKey("easegen.url") + scene.getComponents().get(1).getSrc().substring(scene.getComponents().get(1).getSrc().lastIndexOf("/")); @@ -202,7 +211,7 @@ objectObjectHashMap.put("chaofen", 0); objectObjectHashMap.put("watermark_switch", 0); objectObjectHashMap.put("pn", 1); HttpResponse execute = HttpRequest.post("http://192.168.3.161:8383/easy/submit") HttpResponse execute = HttpRequest.post(configApi.getConfigValueByKey(F2F) +"/easy/submit") .body(JSON.toJSONString(objectObjectHashMap)) .execute(); String body = execute.body(); @@ -237,7 +246,18 @@ //è°ç¨æ¥è¯¢è§é¢ç»æ String result = getResult(code); result = "D:/heygem_data/face2face/temp" + result; if (result == null) { retryCount++; if (retryCount >= maxRetries) { // è¶ è¿éè¯æ¬¡æ°ï¼æ´æ°ç¶æåéè¯¯ä¿¡æ¯ courseMediaDO.setStatus(3); // 3 表示åæå¤±è´¥ courseMediaDO.setErrorReason(truncateErrorMsg("è§é¢åæä»»å¡å¤±è´¥ï¼è¯·è系管çåï¼é误信æ¯: " + execute.getStatus())); courseMediaMapper.updateById(courseMediaDO); return; } continue; // éæ°å°è¯ } result = configApi.getConfigValueByKey(HEYGEM_FACE2FACE) +"/temp" + result; videoUrls.add(result); System.out.println("驱å¨è§é¢å"+result); } catch (Exception e) { @@ -262,7 +282,7 @@ } } String fileListPath = "D:/heygem_data/face2face/temp/filelist.txt"; String fileListPath = configApi.getConfigValueByKey(HEYGEM_FACE2FACE) +"/temp/filelist.txt"; try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileListPath))) { for (String path : videoUrls) { writer.write("file '" + path + "'\n"); @@ -294,7 +314,7 @@ throw new RuntimeException(e); } // "D:/heygem_data/face2face/temp/"+"111111.mp4"å°è¿ä¸ªæä»¶è½¬æbyte[] byte[] bytes = FileUtil.readBytes(FileUtil.file("D:/heygem_data/face2face/temp/"+"111111.mp4")); byte[] bytes = FileUtil.readBytes(FileUtil.file(configApi.getConfigValueByKey(HEYGEM_FACE2FACE) +"/temp/"+"111111.mp4")); String file = fileApi.createFile(bytes); // 妿æåï¼æ´æ°ç¶æä¸º1ï¼æåï¼ courseMediaDO.setStatus(2); @@ -322,7 +342,7 @@ do { try { // è°ç¨æ¥å£è·åä»»å¡ç¶æï¼åè®¾ä½¿ç¨ Hutool ç HttpRequestï¼ String body = HttpRequest.get("http://192.168.3.161:8383/easy/query?code=" + taskCode) String body = HttpRequest.get(configApi.getConfigValueByKey(F2F) + "/easy/query?code=" + taskCode) .execute() .body(); @@ -547,4 +567,118 @@ ex.printStackTrace(); } } @Async public void createSubtitles(CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO) { String subtitlesUrl = configApi.getConfigValueByKey(SUBTITLES_URL); CourseMediaDO courseMediaDO = courseMediaMapper.selectById(courseMediaSubtitlesReqVO.getId()); if (courseMediaDO.getStatus()!= 2) { throw new RuntimeException("è§é¢åæå¤±è´¥ï¼æ æ³çæåå¹"); } String previewUrl = courseMediaDO.getPreviewUrl(); String subtitles = configApi.getConfigValueByKey(SUBTITLES); String extname = previewUrl.substring(previewUrl.lastIndexOf(".")); //è¿ä¸ªæ¯fileåæ° String modelFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + extname; String modelFilePath = Paths.get(subtitles, modelFileName).toString(); String substring = configApi.getConfigValueByKey(EASEGEN_URL) + previewUrl.substring(previewUrl.lastIndexOf("/")); try { Files.copy(Path.of(substring), Path.of(modelFilePath), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { throw new RuntimeException(e); } try { // åéPOSTè¯·æ± HttpResponse execute = HttpRequest.get(subtitlesUrl + "/get_subtitles?file=" + modelFileName+"&lang="+courseMediaSubtitlesReqVO.getLang()+"&sentence_gap="+courseMediaSubtitlesReqVO.getSentenceGap()).execute(); String body = execute.body(); // æ£æ¥ååºç¶æç æ¯å¦æå if (execute.getStatus() != 200) { courseMediaMapper.update(new UpdateWrapper<CourseMediaDO>().lambda().eq(CourseMediaDO::getId, courseMediaSubtitlesReqVO.getId()).set(CourseMediaDO::getSubtitlesStatus, 3)); return; } // è§£æååºï¼æ£æ¥æ¯å¦æéè¯¯ä¿¡æ¯ JSONObject responseJson = JSON.parseObject(body); String final_video_path = responseJson.getString("subtitle_file"); //è·åæä»¶å int index1 = final_video_path.lastIndexOf('/'); int index2 = final_video_path.lastIndexOf('\\'); int lastIndex = Math.max(index1, index2); // åæå¤§ä¸ä¸ª String fileName = final_video_path.substring(lastIndex + 1); byte[] content = Files.readAllBytes(Paths.get(final_video_path)); String fileUrl = fileApi.createFile(fileName, null, content); courseMediaMapper.update( new UpdateWrapper<CourseMediaDO>() .lambda() .eq(CourseMediaDO::getId, courseMediaSubtitlesReqVO.getId()) // æ¡ä»¶ï¼code çäºä¼ å ¥çå¼ .set(CourseMediaDO::getSubtitlesUrl, fileUrl) .set(CourseMediaDO::getLang, courseMediaSubtitlesReqVO.getLang()) .set(CourseMediaDO::getSubtitlesStatus,2) ); FileUtil.del(modelFilePath); FileUtil.del(final_video_path); // å¤çä¸å¡é»è¾éè¯¯ï¼æ´æ°ç¶æåéè¯¯ä¿¡æ¯ } catch (HttpException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } @Async public void createSubtitlesVideo(CourseMediaDO courseMediaDO) { String subtitlesUrl1 = configApi.getConfigValueByKey(SUBTITLES_URL); String previewUrl = courseMediaDO.getPreviewUrl(); String subtitlesUrl = courseMediaDO.getSubtitlesUrl(); String subtitles = configApi.getConfigValueByKey(SUBTITLES); String extname = previewUrl.substring(previewUrl.lastIndexOf(".")); String subtitlesExtname = subtitlesUrl.substring(subtitlesUrl.lastIndexOf(".")); //è¿ä¸ªæ¯fileåæ° String yyyyMMddHHmmssSSS = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()); String modelFileName = yyyyMMddHHmmssSSS + extname; String subtitlesFileName = yyyyMMddHHmmssSSS + subtitlesExtname; String modelFilePath = Paths.get(subtitles, modelFileName).toString(); String subtitlesFilePath = Paths.get(subtitles, subtitlesFileName).toString(); String substring = configApi.getConfigValueByKey(EASEGEN_URL) + previewUrl.substring(previewUrl.lastIndexOf("/")); String subtitlesSubstring = configApi.getConfigValueByKey(EASEGEN_URL) + subtitlesUrl.substring(subtitlesUrl.lastIndexOf("/")); try { Files.copy(Path.of(substring), Path.of(modelFilePath), StandardCopyOption.REPLACE_EXISTING); Files.copy(Path.of(subtitlesSubstring), Path.of(subtitlesFilePath), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { throw new RuntimeException(e); } //modelFileName æ¯è§é¢è·¯å¾ï¼subtitlesFileName æ¯åå¹è·¯å¾ try { // åéPOSTè¯·æ± HttpResponse execute = HttpRequest.get(subtitlesUrl1 + "/add_subtitles?file=" + modelFileName+"&lang="+courseMediaDO.getLang()+"&srt="+subtitlesFileName).execute(); String body = execute.body(); // æ£æ¥ååºç¶æç æ¯å¦æå if (execute.getStatus() != 200) { courseMediaMapper.update(new UpdateWrapper<CourseMediaDO>().lambda().eq(CourseMediaDO::getId, courseMediaDO.getId()).set(CourseMediaDO::getSubtitlesAddStatus, 3)); return; } // è§£æååºï¼æ£æ¥æ¯å¦æéè¯¯ä¿¡æ¯ JSONObject responseJson = JSON.parseObject(body); String final_video_path = responseJson.getString("subtitled_file"); //è·åæä»¶å int index1 = final_video_path.lastIndexOf('/'); int index2 = final_video_path.lastIndexOf('\\'); int lastIndex = Math.max(index1, index2); // åæå¤§ä¸ä¸ª String fileName = final_video_path.substring(lastIndex + 1); byte[] content = Files.readAllBytes(Paths.get(final_video_path)); String fileUrl = fileApi.createFile(fileName, null, content); courseMediaMapper.update( new UpdateWrapper<CourseMediaDO>() .lambda() .eq(CourseMediaDO::getId, courseMediaDO.getId()) // æ¡ä»¶ï¼code çäºä¼ å ¥çå¼ .set(CourseMediaDO::getVideoUrl, fileUrl) .set(CourseMediaDO::getSubtitlesAddStatus,2) ); FileUtil.del(final_video_path); // å¤çä¸å¡é»è¾éè¯¯ï¼æ´æ°ç¶æåéè¯¯ä¿¡æ¯ } catch (HttpException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } } yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceImpl.java
@@ -137,6 +137,7 @@ @Resource private DigitalHumansMapper digitalHumansMapper; private static final String EASEGEN_URL = "easegen.url"; private static final String HEYGEM_CORE_URL = "heygem.core.url"; @Override public String audition(AuditionVO auditionVO) { DigitalHumansDO digitalHumansDO = digitalHumansMapper.selectById(auditionVO.getHumanId()); @@ -152,7 +153,9 @@ } catch (JsonProcessingException e) { throw new RuntimeException(e); } HttpResponse execute = HttpRequest.post("http://192.168.3.161:18180/v1/invoke") String configValueByKey = configApi.getConfigValueByKey(HEYGEM_CORE_URL); String url = configValueByKey + "/v1/invoke"; HttpResponse execute = HttpRequest.post(url) .body(jsonString) .execute(); yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/AbstractFileClient.java
@@ -63,7 +63,7 @@ * @return URL 访é®å°å */ protected String formatFileUrl(String domain, String path) { return StrUtil.format("{}/admin-api/infra/file/{}/get/{}", domain, getId(), path); return StrUtil.format("/admin-api/infra/file/{}/get/{}", getId(), path); } }