python多线程文件的数据续传_Python实现支持并发、断点续传的FTP

1 #!/usr/bin/env python

2 #-*- coding:utf-8 -*-

3

4 importos5 importhashlib6 importpickle7 importsubprocess8 importsocketserver9 from config importsettings10

11 baseHome =settings.BASE_HOME12 classMyServer(socketserver.BaseRequestHandler):13 defrecv_file(self):14 '''

15 文件传输16 :return:17 '''

18 conn =self.request19 a = str(conn.recv(1024),encoding='utf-8')20 file_size, file_name = a.split(',')21 new_file_name =os.path.join(baseHome, file_name)22 if file_name in baseHome: #检测文件是否已存在,涉及断点续传

23 has_recv = os.stat(baseHome).st_size #计算临时文件大小

24 conn.sendall(bytes(has_recv, encoding='utf-8'))25 with open(new_file_name,'ab') as f: #追加模式

26 data = conn.recv(1024)27 f.write(data)28 has_recv +=len(data)29 else:30 has_recv =031 conn.sendall(bytes('s',encoding='utf-8')) #客户端收到字符串s,从0开始发送

32 with open(new_file_name, 'wb') as f:33 while has_recv<=int(file_size):34 data = conn.recv(1024)35 f.write(data)36 has_recv +=len(data)37

38 defsend_file(self, fileName):39 '''

40 向客户端发送文件41 :param fileName:42 :return:43 '''

44 filePath =os.path.join(self.currDir, fileName)45 conn =self.request46 ifos.path.exists(filePath):47 size =os.stat(filePath).st_size48 conn.sendall(bytes(str(size)+','+fileName,encoding='utf-8'))49 ret = conn.recv(1024)50 r = str(ret,encoding='utf-8')51 if r=='s':52 has_send =053 else:54 has_send =int(r)55 with open(filePath,'rb') as f:56 f.seek(has_send)57 while has_send

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值