def client_get(self, *args): """ 用来处理客户端下载功能 """ cmd_split = args[0].split() if len(cmd_split) > 1: filename = cmd_split[1] msg_dic = {"action": "get", "filename": filename, "overridden": True} self.client.send(json.dumps(msg_dic).encode()) server_response = json.loads(self.client.recv(1024).decode()) print(server_response, type(server_response)) if server_response["file_exit"] == settings.LOGIN_STATE["file_exit"]: self.client.send("客户端已准备好下载".encode()) if os.path.isfile(msg_dic["filename"]): f = open(filename + ".new", "wb") else: f = open(filename, "wb") receive_size = 0 while receive_size < server_response["file_size"]: data = self.client.recv(1024) receive_size += len(data) progress_bar.progress_bar(self, receive_size, server_response["file_size"]) f.write(data) else: print("download from server success") elif server_response["file_exit"] == settings.LOGIN_STATE[ "file_no_exit"]: print("%s:请求文件不存在" % server_response["file_exit"])
def client_put(self, *args): """ 用于处理客户端上传功能 """ cmd_split = args[0].split() if len(cmd_split) > 1: filename = cmd_split[1] if os.path.isfile(filename): file_size = os.stat(filename).st_size msg_dic = { "action": "put", "filename": filename, "file_size": file_size, "overridden": True } self.client.send(json.dumps(msg_dic).encode()) server_response = json.loads(self.client.recv(1024).decode()) #print(server_response) if server_response == settings.LOGIN_STATE["file_exit"] or\ server_response == settings.LOGIN_STATE["file_no_exit"]: f = open(filename, "rb") for line in f: self.client.send(line) send_size = f.tell() progress_bar.progress_bar(self, send_size, file_size) else: print("file upload success") f.close() elif server_response == settings.LOGIN_STATE["size_empty"]: print("server_response:磁盘空间不足") else: print(filename, "is not exist")
def client_put(self, *args): """ 用于处理客户端上传功能 """ cmd_split = args[0].split() # 列表 if len(cmd_split) > 1: filename = cmd_split[1] if os.path.isfile(filename): # 判断是否存在文件 file_size = os.stat(filename).st_size msg_dic = { # 为了可拓展性,用字典形式 "action": "put", # 发送给服务端的指令 "filename": filename, "file_size": file_size, "overridden": True } self.client.send(json.dumps(msg_dic).encode()) # 防止粘包,等服务器确认 # 可优化,确认同时服务端看客户端是否有权限等404 403(标准码) server_response = json.loads(self.client.recv(1024).decode()) print(server_response) if server_response == settings.LOGIN_STATE["file_exit"] or\ server_response == settings.LOGIN_STATE["file_no_exit"]: f = open(filename, "rb") for line in f: # 上传文件一行一行 self.client.send(line) send_size = f.tell() #获取当前指针位置(字节) progress_bar.progress_bar(self, send_size, file_size) else: print("file upload success") f.close() #如果磁盘空间不足 elif server_response == settings.LOGIN_STATE["size_empty"]: print("server_response:磁盘空间不足") else: print(filename, "is not exist")
def get_file(self): with open(self.file_name, self.open_model) as f: # 生成进度条对象 if self.kwargs['recv_data'] > 0: progress_bar_generator = progress_bar.progress_bar(self.kwargs['file_size'], current_percent=self.kwargs['current_percent'], last_percent=self.kwargs['current_percent']) else: progress_bar_generator = progress_bar.progress_bar(self.kwargs['file_size'], current_percent=0, last_percent=0) progress_bar_generator.__next__() while self.kwargs['recv_data'] < self.kwargs['file_size']: if self.kwargs['file_size'] - self.kwargs['recv_data'] < 8192: data = self.conn.recv(self.kwargs['file_size'] - self.kwargs['recv_data']) else: data = self.conn.recv(8192) self.kwargs['recv_data'] += len(data) f.write(data) progress_bar_generator.send(self.kwargs['recv_data']) else: return True
def send_file(self): with open(self.file_name, self.open_model) as f: # 生成进度条对象 progress_bar_generator = progress_bar.progress_bar(self.kwargs['file_size'], current_percent=0, last_percent=0) progress_bar_generator.__next__() f.seek(self.kwargs['sended_size']) for line in f: line_len = len(line) self.conn.send(line) self.kwargs['sended_size'] += line_len progress_bar_generator.send(self.kwargs['sended_size']) else: print('文件发送成功') return True