package com.fuyuanshen.app.controller; import com.fuyuanshen.app.service.AudioProcessService; import com.fuyuanshen.app.service.VideoProcessService; import com.fuyuanshen.common.core.domain.R; import com.fuyuanshen.common.idempotent.annotation.RepeatSubmit; import com.fuyuanshen.common.web.core.BaseController; import com.fuyuanshen.equipment.utils.FileHashUtil; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.List; import java.util.concurrent.TimeUnit; /** * APP 视频处理控制器 */ @Validated @RequiredArgsConstructor @RestController @RequestMapping("/app/video") public class AppVideoController extends BaseController { private final VideoProcessService videoProcessService; private final AudioProcessService audioProcessService; private final FileHashUtil fileHashUtil; @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @RepeatSubmit(interval = 2, timeUnit = TimeUnit.SECONDS, message = "请勿重复提交!") public R> uploadVideo(@RequestParam("file") MultipartFile file) throws IOException { // 输出文件基本信息 System.out.println("FileName: " + file.getOriginalFilename()); System.out.println("FileSize: " + file.getSize()); System.out.println("ContentType: " + file.getContentType()); String fileHash = fileHashUtil.hash(file); System.out.println("fileHash:" + fileHash); // 可以添加更多视频属性检查 return R.ok(videoProcessService.processVideo(file)); } /** * 上传音频文件并转码 */ @PostMapping(value = "/audio", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @RepeatSubmit(interval = 2, timeUnit = TimeUnit.SECONDS, message = "请勿重复提交!") public R> uploadAudio(@RequestParam("file") MultipartFile file) { return R.ok(audioProcessService.processAudio(file)); } /** * 文字转音频TTS服务 */ @GetMapping("/audioTTS") @RepeatSubmit(interval = 2, timeUnit = TimeUnit.SECONDS, message = "请勿重复提交!") public R> uploadAudioTTS(@RequestParam String text) throws IOException { return R.ok(audioProcessService.generateStandardPcmData(text)); } /** * 提取文本内容(只支持txt/docx) */ @PostMapping(value = "/extract", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @RepeatSubmit(interval = 2, timeUnit = TimeUnit.SECONDS, message = "请勿重复提交!") public R extract(@RequestParam("file") MultipartFile file) throws Exception { return R.ok("Success", audioProcessService.extract(file)); } }