コード例 #1
0
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"])
コード例 #2
0
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")
コード例 #3
0
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")
コード例 #4
0
    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
コード例 #5
0
    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