66from starlette .requests import Request
77from starlette .responses import HTMLResponse , FileResponse
88from starlette .staticfiles import StaticFiles
9-
9+ import os , shutil
1010from core .utils import error_ip_limit , upload_ip_limit , get_code , storage
1111from core .depends import admin_required
1212from settings import settings
1818app = FastAPI (debug = settings .DEBUG , docs_url = None , redoc_url = None )
1919
2020# 数据存储文件夹
21- DATA_ROOT = Path (settings .DATA_ROOT )
21+ DATA_ROOT = Path (settings .DATA_ROOT + '/files' )
2222if not DATA_ROOT .exists ():
2323 DATA_ROOT .mkdir (parents = True )
2424
@@ -54,6 +54,39 @@ async def admin():
5454 return HTMLResponse (admin_html )
5555
5656
57+ @app .get (f'/{ settings .ADMIN_ADDRESS } /files' , dependencies = [Depends (admin_required )])
58+ async def get_files ():
59+ files = []
60+ for i , j , k in os .walk (f'{ DATA_ROOT } ' ):
61+ files .extend ([{'name' : _ .split ('/' )[- 1 ], 'path' : i } for _ in k ])
62+ return {'data' : files }
63+
64+
65+ @app .post (f'/{ settings .ADMIN_ADDRESS } /files' , dependencies = [Depends (admin_required )])
66+ async def share_file (name = Form (...), path = File (...), s : AsyncSession = Depends (get_session )):
67+ file_path = path + f'/{ name } '
68+ key = uuid .uuid4 ().hex
69+ code = await get_code (s )
70+ now = datetime .datetime .now ()
71+ path = f"{ settings .DATA_ROOT } /upload/{ now .year } /{ now .month } /{ now .day } /"
72+ if not os .path .exists (path ):
73+ os .makedirs (path )
74+ text = f"{ path } /{ f'{ key } { name } ' } "
75+ exp_time = datetime .datetime .now () + datetime .timedelta (days = 1 )
76+ s .add (Codes (code = code , text = text .replace (f'{ settings .DATA_ROOT } /' , '' ), type = 'file' , name = name , count = - 1 ,
77+ exp_time = exp_time , key = key ))
78+ await s .commit ()
79+ shutil .move (file_path , text )
80+ return {
81+ 'detail' : '分享成功!请在24小时内使用分享使用!' ,
82+ 'data' : {
83+ 'code' : code ,
84+ 'text' : text ,
85+ 'name' : name ,
86+ }
87+ }
88+
89+
5790@app .post (f'/{ settings .ADMIN_ADDRESS } ' , dependencies = [Depends (admin_required )], description = '查询数据库列表' )
5891async def admin_post (page : int = Form (default = 1 ), size : int = Form (default = 10 ), s : AsyncSession = Depends (get_session )):
5992 infos = (await s .execute (select (Codes ).offset ((page - 1 ) * size ).limit (size ))).scalars ().all ()
@@ -75,17 +108,6 @@ async def admin_post(page: int = Form(default=1), size: int = Form(default=10),
75108 }}
76109
77110
78- @app .patch (f'/{ settings .ADMIN_ADDRESS } ' , dependencies = [Depends (admin_required )], description = '修改数据库数据' )
79- async def admin_patch (request : Request , s : AsyncSession = Depends (get_session )):
80- data = await request .json ()
81- data .pop ('INSTALL' )
82- for key , value in data .items ():
83- await s .execute (update (Options ).where (Options .key == key ).values (value = value ))
84- await settings .update (key , value )
85- await s .commit ()
86- return {'detail' : '修改成功' }
87-
88-
89111@app .delete (f'/{ settings .ADMIN_ADDRESS } ' , dependencies = [Depends (admin_required )], description = '删除数据库记录' )
90112async def admin_delete (code : str , s : AsyncSession = Depends (get_session )):
91113 # 找到相应记录
@@ -113,10 +135,20 @@ async def config(s: AsyncSession = Depends(get_session)):
113135 {'key' : 'WEBSITE' , 'name' : '网站设置' },
114136 {'key' : 'SHARE' , 'name' : '分享设置' },
115137 {'key' : 'BANNERS' , 'name' : 'Banner' },
116- {'key' : 'WEBSITE' , 'name' : '网站设置' },
117138 ]}
118139
119140
141+ @app .patch (f'/{ settings .ADMIN_ADDRESS } ' , dependencies = [Depends (admin_required )], description = '修改数据库数据' )
142+ async def admin_patch (request : Request , s : AsyncSession = Depends (get_session )):
143+ data = await request .json ()
144+ data .pop ('INSTALL' )
145+ for key , value in data .items ():
146+ await s .execute (update (Options ).where (Options .key == key ).values (value = value ))
147+ await settings .update (key , value )
148+ await s .commit ()
149+ return {'detail' : '修改成功' }
150+
151+
120152@app .get ('/' )
121153async def index ():
122154 return HTMLResponse (index_html )
0 commit comments