feat: add /api/v1/get_bgm_list and /api/v1/upload_bgm_file
This commit is contained in:
@@ -1,11 +1,15 @@
|
||||
from fastapi import Request, Depends, Path, BackgroundTasks
|
||||
import os
|
||||
import glob
|
||||
from fastapi import Request, Depends, Path, BackgroundTasks, UploadFile
|
||||
from fastapi.params import File
|
||||
from loguru import logger
|
||||
|
||||
from app.config import config
|
||||
from app.controllers import base
|
||||
from app.controllers.v1.base import new_router
|
||||
from app.models.exception import HttpException
|
||||
from app.models.schema import TaskVideoRequest, TaskQueryResponse, TaskResponse, TaskQueryRequest
|
||||
from app.models.schema import TaskVideoRequest, TaskQueryResponse, TaskResponse, TaskQueryRequest, BgmListResponse, \
|
||||
BgmUploadResponse
|
||||
from app.services import task as tm
|
||||
from app.services import state as sm
|
||||
from app.utils import utils
|
||||
@@ -52,6 +56,52 @@ def get_task(request: Request, task_id: str = Path(..., description="Task ID"),
|
||||
uri_path = v.replace(task_dir, "tasks")
|
||||
urls.append(f"{endpoint}/{uri_path}")
|
||||
task["videos"] = urls
|
||||
if "combined_videos" in task:
|
||||
combined_videos = task["combined_videos"]
|
||||
task_dir = utils.task_dir()
|
||||
urls = []
|
||||
for v in combined_videos:
|
||||
uri_path = v.replace(task_dir, "tasks")
|
||||
urls.append(f"{endpoint}/{uri_path}")
|
||||
task["combined_videos"] = urls
|
||||
return utils.get_response(200, task)
|
||||
|
||||
raise HttpException(task_id=task_id, status_code=404, message=f"{request_id}: task not found")
|
||||
|
||||
|
||||
@router.get("/get_bgm_list", response_model=BgmListResponse, summary="get local bgm file list")
|
||||
def get_bgm_list(request: Request):
|
||||
suffix = "*.mp3"
|
||||
song_dir = utils.song_dir()
|
||||
files = glob.glob(os.path.join(song_dir, suffix))
|
||||
bgm_list = []
|
||||
for file in files:
|
||||
bgm_list.append({
|
||||
"filename": os.path.basename(file),
|
||||
"size": os.path.getsize(file),
|
||||
"filepath": file,
|
||||
})
|
||||
response = {
|
||||
"bgm_list": bgm_list
|
||||
}
|
||||
return utils.get_response(200, response)
|
||||
|
||||
|
||||
@router.post("/upload_bgm_file", response_model=BgmUploadResponse, summary="upload bgm file to songs directory")
|
||||
def upload_bgm_file(request: Request, file: UploadFile = File(...)):
|
||||
request_id = base.get_task_id(request)
|
||||
# check file ext
|
||||
if file.filename.endswith('mp3'):
|
||||
song_dir = utils.song_dir()
|
||||
save_path = os.path.join(song_dir, file.filename)
|
||||
# save file
|
||||
with open(save_path, "wb+") as buffer:
|
||||
# If the file already exists, it will be overwritten
|
||||
file.file.seek(0)
|
||||
buffer.write(file.file.read())
|
||||
response = {
|
||||
"uploaded_path": save_path
|
||||
}
|
||||
return utils.get_response(200, response)
|
||||
|
||||
raise HttpException('', status_code=400, message=f"{request_id}: Only *.mp3 files can be uploaded")
|
||||
|
||||
Reference in New Issue
Block a user