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