fix(aihr): avoid duplicate inline tts audio

This commit is contained in:
2026-07-14 16:40:41 +08:00
parent c02cdb7b69
commit 26f5160802
5 changed files with 13 additions and 3 deletions
@@ -78,16 +78,16 @@ public class AihrSpeechController {
}
private R<TtsResponse> storeTtsAudio(byte[] audio) {
String inlineAudioUrl = "data:audio/mp3;base64," + Base64.getEncoder().encodeToString(audio);
Path tempFile = null;
try {
tempFile = Files.createTempFile("aihr-tts-", ".mp3");
Files.write(tempFile, audio);
File file = tempFile.toFile();
SysOssVo oss = ossService.upload(file);
return R.ok(new TtsResponse(oss.getUrl(), "openai-compatible", oss.getOssId(), inlineAudioUrl));
return R.ok(new TtsResponse(oss.getUrl(), "openai-compatible", oss.getOssId(), ""));
} catch (Exception e) {
log.warn("tts audio upload failed(处理错误已隐藏)");
String inlineAudioUrl = "data:audio/mp3;base64," + Base64.getEncoder().encodeToString(audio);
return R.ok(new TtsResponse(inlineAudioUrl, "openai-compatible"));
} finally {
if (tempFile != null) {
@@ -70,6 +70,14 @@ class AihrSensitiveTextTest {
assertTrue(practiceLlmSource.contains("practice score parse failed, falls back to seed(处理错误已隐藏)"));
}
@Test
void ttsUploadSuccessDoesNotDuplicateInlineAudio() throws Exception {
String speechControllerSource = Files.readString(controllerSource("AihrSpeechController.java"));
assertTrue(speechControllerSource.contains("new TtsResponse(oss.getUrl(), \"openai-compatible\", oss.getOssId(), \"\")"));
assertTrue(speechControllerSource.contains("new TtsResponse(inlineAudioUrl, \"openai-compatible\")"));
}
private static Path source(String fileName) {
Path direct = Path.of("src/main/java/org/dromara/aihr/service", fileName);
return Files.exists(direct)