示例#1
0
 def server_pwd(self, *args, **kwargs):
     '''
     查看当前服务器目录中的路径
     :param args:
     :param kwargs:
     :return:
     '''
     # print('from server_pwd')
     res = self.get_relative_path(self.current_dir)
     send_response(self.request, 200, data=res)
示例#2
0
    def server_ls(self, *args, **kwargs):
        '''
        查看当前目录文件
        :param args:
        :param kwargs:
        :return:
        '''
        # print('from server_ls')
        #Windows下
        # res = self.run_cmd(r'dir %s' % self.current_dir)

        res = self.run_cmd(r'ls %s' % self.current_dir)
        # print('res', res)
        send_response(self.request, 200, data=res)
示例#3
0
 def handle(self):
     while True:
         self.data = self.request.recv(1024).strip()
         if not self.data:
             print('客户端关闭')
             break
         data = json.loads(self.data.decode())
         if data.get('action') is not None:
             if hasattr(self, 'server_%s' % data.get('action')):
                 func = getattr(self, 'server_%s' % data.get('action'))
                 func(data)
             else:
                 print('无效的cmd')
                 send_response(self.request, 251)
         else:
             print('无效的cmd格式')
             send_response(self.request, 250)
示例#4
0
    def server_auth(self, *args, **kwargs):
        '''
        认证函数
        :param args:
        :param kwargs:
        :return:
        '''
        # print('from server_auth')
        data = args[0]

        if data.get('username') is None or data.get('passwd') is None:
            send_response(self.request, 252)

        user = authenticate(data.get('username'), data.get('passwd'),
                            self.request)
        if user is None:
            send_response(self.request, 253)
        else:
            print('通过验证!', user)

            #Windows下
            # self.home_dir = '%s\\%s'%(settings.HOME_DIR, data.get('username'))

            self.home_dir = '%s/%s' % (settings.HOME_DIR, data.get('username'))
            self.current_dir = self.home_dir
            self.username = user
            send_response(self.request, 254)
示例#5
0
    def server_put(self, *args, **kwargs):
        '''
        上传文件至服务器
        :param args:
        :param kwargs:
        :return:
        '''
        # print('from server_put')
        # print('args',args)
        # print('kwargs', kwargs)
        data = args[0]
        # print('data', data)
        if data.get('filename') == None:
            send_response(self.request, 255)

        file_abs_path = '%s/%s' % (self.current_dir, data.get('filename'))
        # print('file_abs_path',file_abs_path)
        file_obj = open(file_abs_path, 'wb')
        file_base_name = data['filename']
        file_size = data['filesize']
        # TODO 增加判断是否超过磁盘最大容量
        if not self.judge_home_size(file_size):
            send_response(self.request, 262)
            return
        # print('file_size', file_size)
        send_response(self.request, 261)

        if data.get('md5'):  #判断是否需要MD5校验
            md5_obj = hashlib.md5()
            recive_size = 0
            while recive_size < file_size:
                data = self.request.recv(1024)
                recive_size += len(data)
                file_obj.write(data)
                md5_obj.update(data)
            else:
                file_obj.close()
                md5_value = md5_obj.hexdigest()
                data = {'md5': md5_value}
                send_response(self.request, 258, data)
                print('文件%s接收完成' % file_base_name)
        else:
            recive_size = 0
            while recive_size < file_size:
                data = self.request.recv(1024)
                recive_size += len(data)
                file_obj.write(data)
            else:
                file_obj.close()
                print('文件%s接收完成' % file_base_name)
示例#6
0
    def server_cd(self, *args, **kwargs):
        '''
        更改目录,与linux cd命令相同
        :param args:
        :param kwargs:
        :return:
        '''
        # print('from server_cd')

        if args[0]:
            dest_path = "%s%s" % (self.current_dir, args[0]['path'])
        else:
            dest_path = self.home_dir

        real_path = os.path.realpath(dest_path)

        if real_path.startswith(self.home_dir):
            if os.path.isdir(real_path):
                self.current_dir = real_path
                current_relative_dir = self.get_relative_path(self.current_dir)
                res = {'current_path': current_relative_dir}
                send_response(self.request, 260, data=res)
            else:
                send_response(self.request, 259)
        else:
            print('路径没有权限', real_path)
            current_relative_dir = self.get_relative_path(self.current_dir)
            res = {'current_path': current_relative_dir}
            send_response(self.request, 260, data=res)
示例#7
0
    def server_get(self, *args, **kwargs):
        '''
        从服务器下载文件
        :param args:
        :param kwargs:
        :return:
        '''
        # print('from server_get')
        # print('args',args)
        # print('kwargs', kwargs)
        data = args[0]
        # print('data', data)
        if data.get('filename') == None:
            send_response(self.request, 255)

        file_abs_path = '%s/%s' % (self.current_dir, data.get('filename'))
        # print(file_abs_path)

        if os.path.isfile(file_abs_path):
            file_obj = open(file_abs_path, 'rb')
            file_size = os.path.getsize(file_abs_path)
            send_response(self.request, 257, data={'filesize': file_size})
            self.request.recv(1)

            if data.get('md5'):
                md5_obj = hashlib.md5()
                for line in file_obj:
                    self.request.send(line)
                    md5_obj.update(line)
                else:
                    file_obj.close()
                    md5_value = md5_obj.hexdigest()
                    data = {'md5': md5_value}
                    send_response(self.request, 258, data)
                    print('文件%s发送完成' % data['filename'])
            else:
                for line in file_obj:
                    self.request.send(line)
                else:
                    file_obj.close()
                    print('文件%s发送完成' % data['filename'])

        else:
            send_response(self.request, 256)