远控系统支持远程备份知己手机的文件。
由于之前开启服务时已经将文件信息,包括路径存到了数据库中,若要备份文件,则将数据库信息拷贝到备份数据库中,并依据路径上传对应的文件到服务器。测试时,每种文件类型都选择一个文件进行备份操作。点击下方的备份文件按钮如图
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);
}
}
}
笔者这里将代码编写成支持多文件上传。文件上传后将保存在服务器的文件路径记录在数据库。为后面的下载做铺垫。
至此,文件的备份就到此结束。
我是搬运工,热爱我的热爱