feat: TTS download filename = text summary_voice_date
This commit is contained in:
parent
6acd57ab6e
commit
0395cd0ff2
@ -1,6 +1,7 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
|
import re
|
||||||
import secrets
|
import secrets
|
||||||
import smtplib
|
import smtplib
|
||||||
import ssl
|
import ssl
|
||||||
@ -729,6 +730,17 @@ def get_tts_task(task_id: UUID, user: dict = Depends(current_user), connection:
|
|||||||
return task_view(connection, owned_task(task_id, user, connection))
|
return task_view(connection, owned_task(task_id, user, connection))
|
||||||
|
|
||||||
|
|
||||||
|
def tts_download_name(task: dict, voice_name: str | None, mime_type: str) -> str:
|
||||||
|
ext = "mp3" if mime_type == "audio/mpeg" else "wav"
|
||||||
|
raw = unicodedata.normalize("NFC", task["text"] or "")
|
||||||
|
raw = re.sub(r"\s+", "", raw)
|
||||||
|
raw = re.sub(r'[\\/:*?"<>|]', "", raw)
|
||||||
|
summary = raw[:16] or "tts"
|
||||||
|
voice = re.sub(r'[\\/:*?"<>|]', "", voice_name or "")[:16] or "voice"
|
||||||
|
date = task["created_at"].strftime("%Y%m%d")
|
||||||
|
return f"{summary}_{voice}_{date}.{ext}"
|
||||||
|
|
||||||
|
|
||||||
def audio_response(task_id: UUID, user: dict, connection: Connection, download: bool):
|
def audio_response(task_id: UUID, user: dict, connection: Connection, download: bool):
|
||||||
task = owned_task(task_id, user, connection)
|
task = owned_task(task_id, user, connection)
|
||||||
audio = connection.execute("SELECT * FROM audio_files WHERE task_id = %s AND status = 'available'", (task_id,)).fetchone()
|
audio = connection.execute("SELECT * FROM audio_files WHERE task_id = %s AND status = 'available'", (task_id,)).fetchone()
|
||||||
@ -737,7 +749,10 @@ def audio_response(task_id: UUID, user: dict, connection: Connection, download:
|
|||||||
path = Path(settings.audio_storage_dir) / audio["storage_key"]
|
path = Path(settings.audio_storage_dir) / audio["storage_key"]
|
||||||
if not path.is_file():
|
if not path.is_file():
|
||||||
raise error("AUDIO_NOT_AVAILABLE", "音频文件不可用", 404)
|
raise error("AUDIO_NOT_AVAILABLE", "音频文件不可用", 404)
|
||||||
filename = f"kaotings-{task_id}.{'mp3' if audio['mime_type'] == 'audio/mpeg' else 'wav'}" if download else None
|
filename = None
|
||||||
|
if download:
|
||||||
|
voice = connection.execute("SELECT name FROM tts_voices WHERE provider_voice_id = %s", (task["provider_voice_id"],)).fetchone()
|
||||||
|
filename = tts_download_name(task, voice["name"] if voice else None, audio["mime_type"])
|
||||||
return FileResponse(path, media_type=audio["mime_type"], filename=filename)
|
return FileResponse(path, media_type=audio["mime_type"], filename=filename)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user