远控开发记录06_远程备份

远控系统支持远程备份知己手机的文件。
由于之前开启服务时已经将文件信息,包括路径存到了数据库中,若要备份文件,则将数据库信息拷贝到备份数据库中,并依据路径上传对应的文件到服务器。测试时,每种文件类型都选择一个文件进行备份操作。点击下方的备份文件按钮如图

这里写图片描述

这里写图片描述

这里写图片描述

web端点击备份按钮响应函数代码如下:

 public function beifen()
    {
        $often = D('often');
        $upload = D('upload');
        $text['text'] = $_POST['text'];
        $path = $often->where($text)->find();
        $mark['mark'] = 'beifen';
        $mark['beipath'] = $path['path'];
        if (!empty($mark['beipath'])) {
            $this->pushtree($mark);
        }
        echo '1';
    }

这个web后台的代码。这里要给大家讲一个技术。就是为什么点击在web端点击按钮,就能备份文件。我给大家理一下。
web端按钮被点击。服务器就会发送一个消息到你的手机,手机监听到这个消息,根据消息做出响应。这里就是文件上传。因此完成操作。
但是,服务器怎么向手机发送消息。手机又如何来响应这个消息。这就是我要讲的一个重点,云推送技术。也就是上述代码的pushtree函数的实现。
通常来说,是手机客户端主动与服务器通信,服务器做出响应。然而推送技术就可以实现服务器主动与客户端通信。


笔者这里以个推云推送为例。打开个推网站 http://www.getui.com/
注册一个账号,成为个推开发者。登记应用获取必要的id和key

这里写图片描述

点击文档中心。查看使用说明。在web端后台和安卓客户端均要使用个推才能完成推送和响应。

点击http://docs.getui.com/mobile/android/androidstudio/可查看在Android studio下如何集成个推的sdk。

点击http://docs.getui.com/server/php/start/可查看在php环境下使用个推。

推送的方式用很多种。这里笔者选择透传消息推送。当消息发送至手机,手机上的广播监听到该消息,进行相应。下面是响应函数,即是文件上传的函数。

public static void Upload(String filename) throws FileNotFoundException {
        AsyncHttpClient httpClient = App.httpClient;
        RequestParams params = new RequestParams();
        File file = new File(filename);
        params.put("file", file);
        params.put("ClientID", App.cid);
        Log.v("hello", file.getName());
        String url = App.host + "/home/user/Upload";
        httpClient.post(url, params, new AsyncHttpResponseHandler() {
                    @Override
                    public void onSuccess(int i, Header[] headers, byte[] bytes) {
                        if (i == 200) {
                            Log.v("hello", new String(bytes));
                        } else
                            Log.v("hello", "not200");
                    }

                    @Override
                    public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
                        Log.v("hello", new String(bytes));
                    }
                }
        );
    }

代码上的”/home/user/Upload”后台函数是php的文件上传接口。代码如下:

 public function Upload()
    {
        $tab = D('upload');
        $user = D('user');
        $cid['ClientID'] = $_POST['ClientID'];
        $uid = $user->where($cid)->find();
        $upload = new \Think\Upload();
        $upload->rootPath = './';
        $upload->savePath = 'Public/Uploads/';
        $upload->saveName = $upload->name;
        $upload->replace = true;
        $info = $upload->upload();
        if (!$info) {
            echo $upload->getError();
        } else {
            foreach ($info as $file) {
                $data['text'] = $file['savename'];
                $data['path'] = $file['savepath'] . $file['savename'];
                $data['userid'] = $uid['No'];
                if (!$tab->where($data)->find())
                    $tab->add($data);
                else
                    $tab->save($data);
            }
        }
    }

笔者这里将代码编写成支持多文件上传。文件上传后将保存在服务器的文件路径记录在数据库。为后面的下载做铺垫。
至此,文件的备份就到此结束。

我是搬运工,热爱我的热爱

猜你喜欢

转载自blog.csdn.net/u014472643/article/details/52370612