在研究Ajax / jQuery时,我正在尝试设置此测试环境:
你能指点我这个问题的简单骨架,还是给我任何线索? 谢谢,我很感激。
答案 0 :(得分:1)
客户的一些一般想法:
因此,您的客户端所要做的就是请求建立一个会话,请求需要复制哪个文件夹(可能需要请求目录树),然后请求将哪个文件夹复制到哪里,以及每隔几秒或几分钟继续请求进度,直到完成为止。同时,如果用户希望取消它,请向某个端点发送取消请求。
在服务器端,有许多技术可以做到这一点。 django
是最受欢迎的,但这似乎是一个较小的项目,所以我可能会推荐flask
。
至于实际任务,shutil.copytree()
正是您所寻找的。它需要一个自定义复制功能,您可以指定它来更新会话"当前复制"需要复制新文件时的文件:
import shutil
def copy_dir(session_id, source, destination):
def copy_fn(src, dest):
if sessions[session_id]['data'].aborted:
return # Stop copying once requested.
# Or however your session data is structured
sessions[session_id]['data'].current_copy = [src, dest]
shutil.copy2(src, dest) # Actual copy work
shutil.copytree(source, destination, copy_function=copy_fn)
要获取已复制文件的百分比,请将正在复制的文件的大小与正在复制的文件进行比较。
另一种获取复制百分比的方法,os.walk
在目录上生成所有文件名,然后打开文件并将其复制到块中。每隔几个块更新进度。请注意,这非常容易出错。