From 185b72dc8d4e7d1aea9d62540c2f111e9b4e10a3 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 20 Jun 2024 11:38:57 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BC=98=E5=8C=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=AE=A1=E7=90=86api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/aliyun.py | 54 ++++++++++++++++----------------- app/api/endpoints/local.py | 44 ++++++++++++++------------- app/api/endpoints/u115.py | 59 ++++++++++++++++++------------------- 3 files changed, 78 insertions(+), 79 deletions(-) diff --git a/app/api/endpoints/aliyun.py b/app/api/endpoints/aliyun.py index 8acc8cee..2da5c7fe 100644 --- a/app/api/endpoints/aliyun.py +++ b/app/api/endpoints/aliyun.py @@ -56,29 +56,27 @@ def userinfo(_: schemas.TokenPayload = Depends(verify_token)) -> Any: return schemas.Response(success=False) -@router.get("/list", summary="所有目录和文件(阿里云盘)", response_model=List[schemas.FileItem]) -def list_aliyun(path: str, - fileid: str, - filetype: str = "dir", +@router.post("/list", summary="所有目录和文件(阿里云盘)", response_model=List[schemas.FileItem]) +def list_aliyun(fileitem: schemas.FileItem, sort: str = 'updated_at', _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 查询当前目录下所有目录和文件 - :param path: 当前路径 - :param fileid: 文件ID - :param filetype: 文件类型 + :param fileitem: 文件夹信息 :param sort: 排序方式,name:按名称排序,time:按修改时间排序 :param _: token :return: 所有目录和文件 """ - if not fileid: + if not fileitem.fileid: return [] - if not path: + if not fileitem.path: path = "/" + else: + path = fileitem.path if sort == "time": sort = "updated_at" - if filetype == "file": - fileinfo = AliyunHelper().get_file_detail(fileid) + if fileitem.type == "file": + fileinfo = AliyunHelper().get_file_detail(fileitem.fileid) if fileinfo: return [schemas.FileItem( fileid=fileinfo.get("file_id"), @@ -92,7 +90,7 @@ def list_aliyun(path: str, thumbnail=fileinfo.get("thumbnail") )] return [] - items = AliyunHelper().list_files(parent_file_id=fileid, order_by=sort) + items = AliyunHelper().list_files(parent_file_id=fileitem.fileid, order_by=sort) if not items: return [] return [schemas.FileItem( @@ -108,30 +106,30 @@ def list_aliyun(path: str, ) for item in items] -@router.get("/mkdir", summary="创建目录(阿里云盘)", response_model=schemas.Response) -def mkdir_aliyun(fileid: str, +@router.post("/mkdir", summary="创建目录(阿里云盘)", response_model=schemas.Response) +def mkdir_aliyun(fileitem: schemas.FileItem, name: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 创建目录 """ - if not fileid or not name: + if not fileitem.fileid or not name: return schemas.Response(success=False) - result = AliyunHelper().create_folder(parent_file_id=fileid, name=name) + result = AliyunHelper().create_folder(parent_file_id=fileitem.fileid, name=name) if result: return schemas.Response(success=True) return schemas.Response(success=False) -@router.get("/delete", summary="删除文件或目录(阿里云盘)", response_model=schemas.Response) -def delete_aliyun(fileid: str, +@router.post("/delete", summary="删除文件或目录(阿里云盘)", response_model=schemas.Response) +def delete_aliyun(fileitem: schemas.FileItem, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 删除文件或目录 """ - if not fileid: + if not fileitem.fileid: return schemas.Response(success=False) - result = AliyunHelper().delete_file(fileid) + result = AliyunHelper().delete_file(fileitem.fileid) if result: return schemas.Response(success=True) return schemas.Response(success=False) @@ -152,22 +150,23 @@ def download_aliyun(fileid: str, raise HTTPException(status_code=500, detail="下载文件出错") -@router.get("/rename", summary="重命名文件或目录(阿里云盘)", response_model=schemas.Response) -def rename_aliyun(fileid: str, new_name: str, path: str, +@router.post("/rename", summary="重命名文件或目录(阿里云盘)", response_model=schemas.Response) +def rename_aliyun(fileitem: schemas.FileItem, + new_name: str, recursive: bool = False, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 重命名文件或目录 """ - if not fileid or not new_name: + if not fileitem.fileid or not new_name: return schemas.Response(success=False) - result = AliyunHelper().rename_file(fileid, new_name) + result = AliyunHelper().rename_file(fileitem.fileid, new_name) if result: if recursive: transferchain = TransferChain() media_exts = settings.RMT_MEDIAEXT + settings.RMT_SUBEXT + settings.RMT_AUDIO_TRACK_EXT # 递归修改目录内文件(智能识别命名) - sub_files: List[schemas.FileItem] = list_aliyun(path=path, fileid=fileid) + sub_files: List[schemas.FileItem] = list_aliyun(fileitem=fileitem) if sub_files: # 开始进度 progress = ProgressHelper() @@ -185,7 +184,7 @@ def rename_aliyun(fileid: str, new_name: str, path: str, continue if f".{sub_file.extension.lower()}" not in media_exts: continue - sub_path = Path(f"{path}{sub_file.name}") + sub_path = Path(f"{fileitem.path}{sub_file.name}") meta = MetaInfoPath(sub_path) mediainfo = transferchain.recognize_media(meta) if not mediainfo: @@ -195,8 +194,7 @@ def rename_aliyun(fileid: str, new_name: str, path: str, if not new_path: progress.end(ProgressKey.BatchRename) return schemas.Response(success=False, message=f"{sub_path.name} 未识别到新名称") - ret: schemas.Response = rename_aliyun(fileid=sub_file.fileid, - path=path, + ret: schemas.Response = rename_aliyun(fileitem=sub_file, new_name=Path(new_path).name, recursive=False) if not ret.success: diff --git a/app/api/endpoints/local.py b/app/api/endpoints/local.py index e8d08972..f0ff44ae 100644 --- a/app/api/endpoints/local.py +++ b/app/api/endpoints/local.py @@ -20,20 +20,21 @@ router = APIRouter() IMAGE_TYPES = [".jpg", ".png", ".gif", ".bmp", ".jpeg", ".webp"] -@router.get("/list", summary="所有目录和文件(本地)", response_model=List[schemas.FileItem]) -def list_local(path: str, +@router.post("/list", summary="所有目录和文件(本地)", response_model=List[schemas.FileItem]) +def list_local(fileitem: schemas.FileItem, sort: str = 'time', _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 查询当前目录下所有目录和文件 - :param path: 目录路径 + :param fileitem: 文件项 :param sort: 排序方式,name:按名称排序,time:按修改时间排序 :param _: token :return: 所有目录和文件 """ # 返回结果 ret_items = [] - if not path or path == "/": + path = fileitem.path + if not fileitem.path or fileitem.path == "/": if SystemUtils.is_windows(): partitions = SystemUtils.get_windows_drives() or ["C:/"] for partition in partitions: @@ -47,8 +48,8 @@ def list_local(path: str, else: path = "/" else: - if not SystemUtils.is_windows() and not path.startswith("/"): - path = "/" + path + if not SystemUtils.is_windows() and not fileitem.path.startswith("/"): + path = "/" + fileitem.path # 遍历目录 path_obj = Path(path) @@ -143,28 +144,30 @@ def list_local_dir(path: str, _: schemas.TokenPayload = Depends(verify_token)) - return ret_items -@router.get("/mkdir", summary="创建目录(本地)", response_model=schemas.Response) -def mkdir_local(path: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any: +@router.post("/mkdir", summary="创建目录(本地)", response_model=schemas.Response) +def mkdir_local(fileitem: schemas.FileItem, + name: str, + _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 创建目录 """ - if not path: + if not fileitem.path: return schemas.Response(success=False) - path_obj = Path(path) + path_obj = Path(fileitem.path) / name if path_obj.exists(): return schemas.Response(success=False) path_obj.mkdir(parents=True, exist_ok=True) return schemas.Response(success=True) -@router.get("/delete", summary="删除文件或目录(本地)", response_model=schemas.Response) -def delete_local(path: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any: +@router.post("/delete", summary="删除文件或目录(本地)", response_model=schemas.Response) +def delete_local(fileitem: schemas.FileItem, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 删除文件或目录 """ - if not path: + if not fileitem.path: return schemas.Response(success=False) - path_obj = Path(path) + path_obj = Path(fileitem.path) if not path_obj.exists(): return schemas.Response(success=True) if path_obj.is_file(): @@ -196,16 +199,17 @@ def download_local(path: str, _: schemas.TokenPayload = Depends(verify_uri_token return reponse -@router.get("/rename", summary="重命名文件或目录(本地)", response_model=schemas.Response) -def rename_local(path: str, new_name: str, +@router.post("/rename", summary="重命名文件或目录(本地)", response_model=schemas.Response) +def rename_local(fileitem: schemas.FileItem, + new_name: str, recursive: bool = False, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 重命名文件或目录 """ - if not path or not new_name: + if not fileitem.path or not new_name: return schemas.Response(success=False) - path_obj = Path(path) + path_obj = Path(fileitem.path) if not path_obj.exists(): return schemas.Response(success=False) path_obj.rename(path_obj.parent / new_name) @@ -213,7 +217,7 @@ def rename_local(path: str, new_name: str, transferchain = TransferChain() media_exts = settings.RMT_MEDIAEXT + settings.RMT_SUBEXT + settings.RMT_AUDIO_TRACK_EXT # 递归修改目录内文件(智能识别命名) - sub_files: List[schemas.FileItem] = list_local(path) + sub_files: List[schemas.FileItem] = list_local(fileitem=fileitem) if sub_files: # 开始进度 progress = ProgressHelper() @@ -241,7 +245,7 @@ def rename_local(path: str, new_name: str, if not new_path: progress.end(ProgressKey.BatchRename) return schemas.Response(success=False, message=f"{sub_path.name} 未识别到新名称") - ret: schemas.Response = rename_local(new_path, new_name=Path(new_path).name, recursive=False) + ret: schemas.Response = rename_local(fileitem, new_name=Path(new_path).name, recursive=False) if not ret.success: progress.end(ProgressKey.BatchRename) return schemas.Response(success=False, message=f"{sub_path.name} 重命名失败!") diff --git a/app/api/endpoints/u115.py b/app/api/endpoints/u115.py index df54a038..51bf0d64 100644 --- a/app/api/endpoints/u115.py +++ b/app/api/endpoints/u115.py @@ -1,4 +1,3 @@ -import base64 from pathlib import Path from typing import Any, List @@ -56,30 +55,28 @@ def storage(_: schemas.TokenPayload = Depends(verify_token)) -> Any: return schemas.Response(success=False) -@router.get("/list", summary="所有目录和文件(115网盘)", response_model=List[schemas.FileItem]) -def list_115(path: str, - fileid: str, - pickcode: str = None, - filetype: str = "dir", +@router.post("/list", summary="所有目录和文件(115网盘)", response_model=List[schemas.FileItem]) +def list_115(fileitem: schemas.FileItem, sort: str = 'updated_at', _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 查询当前目录下所有目录和文件 - :param path: 当前路径 - :param fileid: 文件ID - :param pickcode: 115 pickcode - :param filetype: 文件类型 + :param fileitem: 文件项 :param sort: 排序方式,name:按名称排序,time:按修改时间排序 :param _: token :return: 所有目录和文件 """ - if not fileid: + if not fileitem.fileid: return [] - if not path: + if not fileitem.path: path = "/" - if fileid == "root": + else: + path = fileitem.path + if fileitem.fileid == "root": fileid = "0" - if filetype == "file": + else: + fileid = fileitem.fileid + if fileitem.type == "file": name = Path(path).name suffix = Path(name).suffix[1:] return [schemas.FileItem( @@ -88,7 +85,7 @@ def list_115(path: str, path=path.rstrip('/'), name=name, extension=suffix, - pickcode=pickcode + pickcode=fileitem.pickcode )] items = U115Helper().list_files(parent_file_id=fileid) if not items: @@ -111,30 +108,30 @@ def list_115(path: str, return file_list -@router.get("/mkdir", summary="创建目录(115网盘)", response_model=schemas.Response) -def mkdir_115(fileid: str, +@router.post("/mkdir", summary="创建目录(115网盘)", response_model=schemas.Response) +def mkdir_115(fileitem: schemas.FileItem, name: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 创建目录 """ - if not fileid or not name: + if not fileitem.fileid or not name: return schemas.Response(success=False) - result = U115Helper().create_folder(parent_file_id=fileid, name=name) + result = U115Helper().create_folder(parent_file_id=fileitem.fileid, name=name) if result: return schemas.Response(success=True) return schemas.Response(success=False) -@router.get("/delete", summary="删除文件或目录(115网盘)", response_model=schemas.Response) -def delete_115(fileid: str, +@router.post("/delete", summary="删除文件或目录(115网盘)", response_model=schemas.Response) +def delete_115(fileitem: schemas.FileItem, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 删除文件或目录 """ - if not fileid: + if not fileitem.fileid: return schemas.Response(success=False) - result = U115Helper().delete_file(fileid) + result = U115Helper().delete_file(fileitem.fileid) if result: return schemas.Response(success=True) return schemas.Response(success=False) @@ -157,22 +154,23 @@ def download_115(pickcode: str, return schemas.Response(success=False) -@router.get("/rename", summary="重命名文件或目录(115网盘)", response_model=schemas.Response) -def rename_115(fileid: str, new_name: str, path: str, +@router.post("/rename", summary="重命名文件或目录(115网盘)", response_model=schemas.Response) +def rename_115(fileitem: schemas.FileItem, + new_name: str, recursive: bool = False, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 重命名文件或目录 """ - if not fileid or not new_name: + if not fileitem.fileid or not new_name: return schemas.Response(success=False) - result = U115Helper().rename_file(fileid, new_name) + result = U115Helper().rename_file(fileitem.fileid, new_name) if result: if recursive: transferchain = TransferChain() media_exts = settings.RMT_MEDIAEXT + settings.RMT_SUBEXT + settings.RMT_AUDIO_TRACK_EXT # 递归修改目录内文件(智能识别命名) - sub_files: List[schemas.FileItem] = list_115(path=path, fileid=fileid) + sub_files: List[schemas.FileItem] = list_115(fileitem) if sub_files: # 开始进度 progress = ProgressHelper() @@ -190,7 +188,7 @@ def rename_115(fileid: str, new_name: str, path: str, continue if f".{sub_file.extension.lower()}" not in media_exts: continue - sub_path = Path(f"{path}{sub_file.name}") + sub_path = Path(f"{fileitem.path}{sub_file.name}") meta = MetaInfoPath(sub_path) mediainfo = transferchain.recognize_media(meta) if not mediainfo: @@ -200,8 +198,7 @@ def rename_115(fileid: str, new_name: str, path: str, if not new_path: progress.end(ProgressKey.BatchRename) return schemas.Response(success=False, message=f"{sub_path.name} 未识别到新名称") - ret: schemas.Response = rename_115(fileid=sub_file.fileid, - path=path, + ret: schemas.Response = rename_115(fileitem=sub_file, new_name=Path(new_path).name, recursive=False) if not ret.success: