def file_show(self, show): client_show = "\033[32;1m---client will show file list---\033[32;1m" log_models(self.login_user, client_show) if self.login_user: file_abs_path = "%s/%s" % (settings.USER_HOME, self.login_user) file_list = json.dumps(os.listdir(file_abs_path)) self.request.send(file_list)
def user_auth(self, data): # 认证函数 auth_info = json.loads(data[1]) if auth_info["username"] in settings.USER_ACCOUNT: # 判断是否是有效用户 if auth_info["password"] == settings.USER_ACCOUNT[auth_info["username"]]["password"]: # 判断密码是否相同 response_code = "200" self.login_user = auth_info["username"] # 定义全局变量,方便获取 log_models(self.login_user, "User is Login.....") else: response_code = "401" else: response_code = "404" response_str = "response|%s|%s" % (response_code, self.response_code_list[response_code]) # 拼接server发送信息 self.request.send(response_str) return response_code
def file_get(self, user_data): print ("\033[32;1m---client will get file----\033[0m") if self.login_user: # 判断用户是否登录 filename_with_path = json.loads(user_data[1]) # 获取文件名 file_abs_path = "%s/%s/%s" % (settings.USER_HOME, self.login_user, filename_with_path) # 获取文件的路径 log_models(self.login_user, file_abs_path) print file_abs_path if os.path.isfile(file_abs_path): # 判断文件是否存在 file_md5 = self.hashfile(file_abs_path) print file_md5 file_size = os.path.getsize(file_abs_path) # 获取文件大小 response_msg = "response|300|%s|%s" % (file_size, file_md5) self.request.send(response_msg) # 发送确认信息 client_response = self.request.recv(1024).split("|") print "\033[34;1m%s\033[0m" % client_response if client_response[1] == "301": # 客户端已经准备接收文件 sent_size = 0 f = open(file_abs_path, "rb") t_start = time.time() while file_size != sent_size: data = f.read(4096) self.request.send(data) sent_size += len(data) # print ("send:",file_size,sent_size) else: t_cost = time.time() - t_start cost_time = "----successfully sent file to client file transfer time:%s ---" % t_cost log_models(self.login_user, cost_time) else: response_msg = "response|403|n/a|n/a" self.request.send(response_msg) log_models(self.login_user, "request invalid file name")
def file_push(self, user_data): # 上传方法 client_want = "\033[32;1m---client will push file----\033[0m" log_models(self.login_user, client_want) if self.login_user: # 判断用户是否登录 file_name = json.loads(user_data[1]) # 获取文件名 print file_name file_abs_path = "%s/%s/%s" % (settings.USER_HOME, self.login_user, file_name) # 获取文件的路径 self.request.send("303") file_size = self.request.recv(1024) print file_size total_file_size = int(file_size) # 取出文件大小 self.request.send("do it") received_size = 0 local_file_obj = open(file_abs_path, "wb") # 打开文件 while total_file_size != received_size: # 循环接收文件 data = self.request.recv(4096) received_size += len(data) local_file_obj.write(data) print ("recv size:", total_file_size, received_size) else: update_msg = "\033[32;1m----file update finished-----\033[0m" log_models(self.login_user, update_msg) local_file_obj.close()