1、 执行备份或恢复操作 ),通过 FileInputStream 和 FileOutputStream 对数据库文件进行 read/write。如果是本地备份则将自身的数据库文件写到 SDCard;如果是本地恢复将 SDCard 中对应的文件写到 Contacts 应用对应的路径下,用以覆盖原始数据库文件。用 Environment.getExternalStorageDirectory() 方法获取 SD 卡的路径 , 卡存储空间大小及已占用空间获取方法 : /* 获取存储卡路径 */ File sdcardDir=Environment.getExternalStorageDirectory
2、(); /*StatFs 看文件系统空间使用情况 */ StatFs statFs=new StatFs(sdcardDir.getPath(); /*Block 的 size*/ Long blockSize=statFs.getBlockSize(); /* 总 Block 数量 */ Long totalBlocks=statFs.getBlockCount(); /* 已使用的 Block 数量 */ Long availableBlocks=statFs.getAvailableBlocks();序列图如下所示:图 4. 本地备份恢复序列图本地备份恢复客户端的实现:如下图给出了 Ba
3、ckupRestoreActivity 和 ContactsReceiver 的类图,以及他们工作机制中涉及到的类的结构。图 5. 本地备份恢复类图 Intent 在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调 用者之间的解耦 . 此处的 IntentFilter 起动态注册 action, 使之用于接收同 action 的广播消息 IntentFilter commandFilter = newIntentFilter(); commandFilter.addAction(signal); registerReceiver(BroadcastReceiver,
4、 commandFilter); BroadcastReceiver 用来接收和响应广播消息 Handler 主要接受子线程发送的数据 , 并用此数据配合主线程更新 UI. ContactsReceiver 调用 Thread 开启一个线程 , 用以接收由 BackupRestoreActivity 发出的备份 / 恢复信号。 NetToolHandler(用于网络备份恢复)定义了一些用来和服务器进行交互的方法;IHttpResponse 是在 NetToolHandler 中定义的一个内部接口,主要用来回调 NetToolHandler 中返回的信息,根据返回的信息进行下一步操作。用户选择本
5、地备份或者本地恢复,ContactsReceiver 则收到广播消息后,根据信号判断操作的类别是备份还是恢复,然后启动一个线程,在线程中调用 Handler,通过 Handler 去处理读写数据。网络备份恢复服务器端设计与实现网络备份通过 WiFi 或者 GPRS 在手机端与服务器进行连接,服务器提供相应的接口,用于上传或下载文件。服务器端用例分析1) 备份数据上传:响应客户端的 backup 功能。文件通过 HTTP 请求提交到服务器,服务器接收文件并保存,序列图表示如下:图 6. 网络备份恢复上传序列图说明:如果 Servlet 检查到输入参数不合法,会中断服务并通知客户端。接口定义:UR
6、L:https:/:/upload?uuid=&name=md5= 8b1a9fbf5e111296a827abf8c47804d7&offset=desc=size=deviceid=,HTTP 正文为上传的内容表 1. 备份数据上传参数表提交项关键字作用格式uuid方便上载失败后断点续传 , 客户端生成文件名name上传文件名MD5 校验码md5用于对上载文件作完整性校验。16 进制格式,共 32 位长偏移量offset断点续传的偏移量。长整数,最小为 0,最大为文件字节数。文件描述信息desc除用户名外的文件描述。不能大于 256 个字符,否则抛出 400 错误文件大小size用于断点续
7、传功能建立文件时使用。长整数设备 iddeviceid用于一个用户多个设备进行网络备份恢复的依据必须使用 POST 方式提交,且只允许上传一个文件offset:客户端应从 offset( 包含 offset) 开始上传文件。offset=0 时,忽略 offset 参数。如果是续传文件,应先用 uploadquery 接口查询文件已上传部分的大小,以获取 offset 的值表 2. 备份数据上传返回值成功HTTP 头HTTP Body200空失败(包含公共错误)HTTP 头错误码HTTP Body (Xml 格式的错误消息)CodeMessage400MSG-1001文件上传失败2) 备份数据
8、下载:响应客户端的网络恢复功能。根据文件名将用户请求的文件传递给客户端。序列图表示如下:图 7. 网络备份恢复下载序列图流程描述如下: 客户端向服务器发送 requestDownload 请求,请求中包含文件的 uuid 和断点续传的起始点。 Servlet 调用 downloadSavedFile 接口 , 传递文件 uuid 和 range 参数。 数据库存取返回自 range 开始的字节流,字节流返回给前面的 servlet。/fileDownload? uuid=range= &参数含义同备份数据上传;客户端应从 range ( 包含 range) 开始下载,range =0 时,忽略
9、 range 参数。表 3. 备份数据下载返回值:200/201要下载的文件流 , 新下载返回的是 200 否则返回 201失败MSG-1002无法下载3) 新建手机备份存储空间:当客户端第一次访问备份服务器时,系统会返回找不到个人网络备份存储空间错误,客户端软件提示用户是否新建备份空间,用户确认建立个人网络备份空间,系统才会为其建立存储空间。服务器会用 deviceid 为标识为对应的手机的分配固定大小的空间。服务器端使用 adapter 模式来连接多种不同文件存储媒体。图 8. 网络备份恢复创建存储空间序列图/createspace?参数含义同备份数据上传。表 4. 创建存储空间返回值:M
10、SG-1003备份空间已建立MSG-1004新建备份空间失败4) 查询已上传部分的大小:当文件上传中断时,可以查询已上传部分的大小,然后断点续传余下部分。图 9. 网络备份恢复查询已上传部分序列图/uploadquery?表 5. 查询文件已上传部分返回值:正整数(文件已上传部分的大小)MSG-1005文件已上传完成服务器端的实现: 1) 包文件设计如下所示:图 10. 网络备份恢复包文件设计图 com.bakrestore.server.dao 下面主要存放 DAO 接口,DAO 主要用来解偶业务方法和数据源,即在业务核心方法和具体数据源之间再增加一层,用来连接业务方法和数据源。 com.b
11、akrestore.server.model 主要存放一些持久化类 com.bakrestore.server.service 主要存放业务逻辑类 com.bakrestore.server.web 主要用来存放接口类,用来响应手机终端。在 spring 的配置文件:applicationContext.xml 中,该文件中定义了 Spring 要管理的所有的 Beans, 用 Beans 的形式来管理所有的对象以及他们之间的赋值依赖的。在此配置文件中主要定义了 dao,model,service 下面的类。示例代码如下:清单 1. spring 的配置文件 property name=con
12、figLocation value=classpath:com/bakrestore/server/dao/ibatis/sql/sql-map-config.xml /dataSource ref=lobHandler/beanuserSpaceDAOcom.bakrestore.server.dao.ibatis.UserSpaceDAOImpl/userFileDAOcom.bakrestore.server.dao.ibatis.UserFileDAOImpladddbdaocom.bakrestore.server.dao.ibatis.AddDbDAOImpl addDbServi
13、cecom.bakrestore.server.service.impl.AddDbServiceImplfileContentServicefileServicecom.bakrestore.server.service.impl.FileServiceImplspaceServicecom.bakrestore.server.service.impl.SpaceServiceImplspaceMaxSize$UserSpaceMaxSize在 SpringDispatcher-servlet.xml 配置一个视图解析器,其次将手机端的请求与相应的进行映射以便程序在执行过程中可以依据映射找到
14、所需 Controller,相应的 Controller 与 applicationContext.xml 所定义的 beans 进行交互。清单 2. 配置一个视图解析器createspace name=/createspace parent=pimcom.bakrestore.server.web.CreateSpaceControllerdownload/downloadcom.bakrestore.server.web.DownloadController uploadquery/uploadquerycom.bakrestore.server.web.UploadQueryContro
15、llerupload/uploadcom.bakrestore.server.web.UploadControllersizeMax$UploadFileSizeMaxuploadFileTempFolder$UploadFileTempFolder2) 持久化类设计如下所示:在 com.bakrestore.server.model 文件夹中包含 FileNode, FolderNode,UserFile,DatabaseFileContent,FileSystemFileContent,UserFileContent,UserSpace 的一些类 , 他们的作用是: DatabaseFil
16、eContent:用数据库存储文件内容的文件内容实体类 FileSystemFileContent:用文件系统的保存文件内容 实体类 FileNode:文件结点,与 FolderNode 一起构成了文件目录树 FolderNode:目录节点 UserFile:用户文件或文件夹实体类 UserFileContent:用户文件内容实体类 , 抽象类 UserSpace:用户备份空间实体类类图以及他们工作机制如下所示:图 11. 网络备份恢复持久化类设计图3) 应用类 :应用类主要用来响应手机发出的 HTTP 请求信号,在 com.bakrestore.server.web 文件夹主要包含 Crea
17、teSpaceController,DownloadController,ErrorCode,BaseController,RequestParamater,UploadController,UploadQueryController 等一些控制器,他们的作用分别是: CreateSpaceController:创建用户空间 DownloadController:用以文件下载 ErrorCode:错误消息封装类 BaseController:备份恢复系统中 Controller 的公共类,定义了通用的变量和方法 RequestParamater:参数解析类 UploadController:文
18、件上传服务类 UploadQueryController:查询已上传文件部分的大小以下是他们之间的工作机制:图 12. 网络备份恢复应用类设计图4) DAO 类在 dao 文件夹包含 PbsDataAccessException,UserFileContentDAO,UserFileDAO,UserSpaceDAO 四个 interface,他们的作用分别是: PbsDataAccessException:数据库操作异常,所有对数据库的操作都要抛出此异常 UserFileContentDAO:对文件内容存取的 DAO 接口 UserFileDAO:对文件信息存取的 DAO 接口 UserSpa
19、ceDAO:对备份空间信息存取的 DAO 接口以下是他们之间的工作机制:图 13. 网络备份恢复 DAO 类设计图5) 业务逻辑类在 service 文件夹包含 FileContentService,FileService,SpaceService 三个 interface,他们的作用分别是: FileContentService:对文件内容进行操作的接口 FileService:对文件进行操作维护的接口 SpaceService:对手机备份空间进行维护的接口图 14. 网络备份恢复业务逻辑类设计图6) 数据库层设计数据库层设计及相互关系表示如下:图 15. 数据库关系图表 6. 用户存储空间
20、表 UserSpace字段名类型描述备注idInteger存储空间 ID主键,系统生成userID用户 IDFK( 逻辑外键 )deviceIDVarchar(16)FKrootPathVarchar(256)根文件夹仅当文件存储在文件系统时有效spaceTypeChar(1)0- 设备备份空间,1- 普通备份空间maxSize最大空间大小usedSize已使用空间大小directionStructLONGTEXT目录结构 xmldirectionStructMD5Char(32)目录结构 xml 的 MD5 验证码createSystemTimeDateTime创建时间系统生成表 7. 用户上传的文件表 UserFileVarchar(32)文件 IDuserSpaceIDFK, 用户存储空间表的主键fileNameVarchar(128)modifySystemTime修改时间
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1