3030@app .on_event ('startup' )
3131async def startup ():
3232 await init_models ()
33-
3433 asyncio .create_task (delete_expire_files ())
3534
35+
3636index_html = open ('templates/index.html' , 'r' , encoding = 'utf-8' ).read () \
3737 .replace ('{{title}}' , settings .TITLE ) \
3838 .replace ('{{description}}' , settings .DESCRIPTION ) \
@@ -48,7 +48,7 @@ async def startup():
4848def delete_file (files ):
4949 for file in files :
5050 if file ['type' ] != 'text' :
51- os .remove (DATA_ROOT / file ['text' ].lstrip (STATIC_URL + '/' ))
51+ os .remove (DATA_ROOT / file ['text' ].lstrip (STATIC_URL + '/' ))
5252
5353
5454async def delete_expire_files ():
@@ -57,12 +57,10 @@ async def delete_expire_files():
5757 query = select (Codes ).where (or_ (Codes .exp_time < datetime .datetime .now (), Codes .count == 0 ))
5858 exps = (await s .execute (query )).scalars ().all ()
5959 await asyncio .to_thread (delete_file , [{'type' : old .type , 'text' : old .text } for old in exps ])
60-
6160 exps_ids = [exp .id for exp in exps ]
6261 query = delete (Codes ).where (Codes .id .in_ (exps_ids ))
6362 await s .execute (query )
6463 await s .commit ()
65-
6664 await asyncio .sleep (random .randint (60 , 300 ))
6765
6866
@@ -73,20 +71,16 @@ async def get_code(s: AsyncSession):
7371 return str (code )
7472
7573
76- def get_file_name (key , ext , file ):
74+ def get_file_name (key , ext , file , file_bytes ):
7775 now = datetime .datetime .now ()
78- file_bytes = file .file .read ()
79- size = len (file_bytes )
80- if size > settings .FILE_SIZE_LIMIT :
81- return size , '' , '' , ''
8276 path = DATA_ROOT / f"upload/{ now .year } /{ now .month } /{ now .day } /"
8377 name = f'{ key } .{ ext } '
8478 if not path .exists ():
8579 path .mkdir (parents = True )
8680 filepath = path / name
8781 with open (filepath , 'wb' ) as f :
8882 f .write (file_bytes )
89- return size , f"{ STATIC_URL } /{ filepath .relative_to (DATA_ROOT )} " , file .content_type , file .filename
83+ return f"{ STATIC_URL } /{ filepath .relative_to (DATA_ROOT )} " , file .content_type , file .filename
9084
9185
9286@app .get (f'/{ settings .ADMIN_ADDRESS } ' )
@@ -148,7 +142,7 @@ async def get_file(code: str, s: AsyncSession = Depends(get_session)):
148142 if info .type == 'text' :
149143 return {'code' : code , 'msg' : '查询成功' , 'data' : info .text }
150144 else :
151- return FileResponse (DATA_ROOT / info .text .lstrip (STATIC_URL + '/' ), filename = info .name )
145+ return FileResponse (DATA_ROOT / info .text .lstrip (STATIC_URL + '/' ), filename = info .name )
152146 else :
153147 return {'code' : 404 , 'msg' : '口令不存在' }
154148
@@ -173,7 +167,6 @@ async def index(request: Request, code: str, s: AsyncSession = Depends(get_sessi
173167 await s .commit ()
174168 if info .type != 'text' :
175169 info .text = f'/select?code={ code } '
176-
177170 return {
178171 'code' : 200 ,
179172 'msg' : '取件成功,请点击"取"查看' ,
@@ -200,9 +193,11 @@ async def share(text: str = Form(default=None), style: str = Form(default='2'),
200193 exp_count = - 1
201194 key = uuid .uuid4 ().hex
202195 if file :
203- size , _text , _type , name = get_file_name (key , file .filename .split ('.' )[- 1 ], file )
196+ file_bytes = file .file .read ()
197+ size = len (file_bytes )
204198 if size > settings .FILE_SIZE_LIMIT :
205199 return {'code' : 404 , 'msg' : '文件过大' }
200+ _text , _type , name = get_file_name (key , file .filename .split ('.' )[- 1 ], file , file_bytes )
206201 else :
207202 size , _text , _type , name = len (text ), text , 'text' , '文本分享'
208203 info = Codes (
0 commit comments