diff --git a/main.py b/main.py index 2cbb27f..584d8a2 100644 --- a/main.py +++ b/main.py @@ -155,7 +155,7 @@ def main(): click_handle = functional[k]["Button"].click(fn=ArgsGeneralWrapper(predict), inputs=[*input_combo, gr.State(True), gr.State(k)], outputs=output_combo) cancel_handles.append(click_handle) # 文件上传区,接收文件后与chatbot的互动 - file_upload.upload(on_file_uploaded, [file_upload, chatbot, txt, txt2, checkboxes], [chatbot, txt, txt2]) + file_upload.upload(on_file_uploaded, [file_upload, chatbot, txt, txt2, checkboxes, cookies], [chatbot, txt, txt2]) # 函数插件-固定按钮区 for k in crazy_fns: if not crazy_fns[k].get("AsButton", True): continue @@ -185,6 +185,12 @@ def main(): # 终止按钮的回调函数注册 stopBtn.click(fn=None, inputs=None, outputs=None, cancels=cancel_handles) stopBtn2.click(fn=None, inputs=None, outputs=None, cancels=cancel_handles) + def init_cookie(cookies, chatbot): + # 为每一位访问的用户赋予一个独一无二的uuid编码 + import uuid + cookies.update({'user-uuid': 'user-'+uuid.uuid4().hex}) + return cookies + demo.load(init_cookie, inputs=[cookies, chatbot], outputs=[cookies]) # gradio的inbrowser触发不太稳定,回滚代码到原始的浏览器打开函数 def auto_opentab_delay(): diff --git a/toolbox.py b/toolbox.py index 256d99c..314ae24 100644 --- a/toolbox.py +++ b/toolbox.py @@ -452,7 +452,7 @@ def promote_file_to_downloadzone(file, rename_file=None, chatbot=None): else: current = [] chatbot._cookies.update({'file_to_promote': [new_path] + current}) -def on_file_uploaded(files, chatbot, txt, txt2, checkboxes): +def on_file_uploaded(files, chatbot, txt, txt2, checkboxes, cookies): """ 当文件被上传时的回调函数 """ @@ -463,24 +463,23 @@ def on_file_uploaded(files, chatbot, txt, txt2, checkboxes): import time import glob from toolbox import extract_archive - try: - shutil.rmtree('./private_upload/') - except: - pass + user_uuid = cookies.get('user-uuid', 'unknown_user') + try: shutil.rmtree(f'./private_upload/{user_uuid}') + except: pass time_tag = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) - os.makedirs(f'private_upload/{time_tag}', exist_ok=True) + os.makedirs(f'private_upload/{user_uuid}/{time_tag}', exist_ok=True) err_msg = '' for file in files: file_origin_name = os.path.basename(file.orig_name) - shutil.copy(file.name, f'private_upload/{time_tag}/{file_origin_name}') - err_msg += extract_archive(f'private_upload/{time_tag}/{file_origin_name}', - dest_dir=f'private_upload/{time_tag}/{file_origin_name}.extract') - moved_files = [fp for fp in glob.glob('private_upload/**/*', recursive=True)] + shutil.copy(file.name, f'private_upload/{user_uuid}/{time_tag}/{file_origin_name}') + err_msg += extract_archive(f'private_upload/{user_uuid}/{time_tag}/{file_origin_name}', + dest_dir=f'private_upload/{user_uuid}/{time_tag}/{file_origin_name}.extract') + moved_files = [fp for fp in glob.glob(f'private_upload/{user_uuid}/**/*', recursive=True)] if "底部输入区" in checkboxes: txt = "" - txt2 = f'private_upload/{time_tag}' + txt2 = f'private_upload/{user_uuid}/{time_tag}' else: - txt = f'private_upload/{time_tag}' + txt = f'private_upload/{user_uuid}/{time_tag}' txt2 = "" moved_files_str = '\t\n\n'.join(moved_files) chatbot.append(['我上传了文件,请查收',