发表于: 2017-09-04 20:49:37

1 908


一.今天完成的事情

1.实现两个云存储之间数据的相互迁移

首先,编写Transfer类,类中主要包含三个方法,其中一个是公共的transfer方法,对外开放,还有两个分别是qiniuToAli和aliToQiniu,代表两个云存储之间的数据的相互迁移,同时还额外定义了两个字段,一个是toOther字段,该字段的值代表到底是从哪到哪,例如,该字段值为qiniu-to-ali,那么意味着将七牛云中的数据迁移到阿里云中.还有一个是isDelete字段,代表迁移完成后是否删除原来空间中的数据.

以下是七牛云向阿里云迁移的代码

反过来也类似,将这两个方法都封装在transfer方法中

然后采用setter注入的方式注入toOther字段和idDelete字段的值,实现不修改源代码,只修改配置文件完成数据的迁移

然后在前端页面中设置按钮,只要点击该按钮,就可以实现数据的迁移,在迁移前会根据目前toOther字段的状态,显示提示信息:

控制器中的代码为:

@RequestMapping(value = "/u/transfer", method = RequestMethod.GET)
public String transfer() {
//根据配置文件要求迁移数据
   boolean result = transfer.transfer();
if (!result) {
return "failed";
}
String prefix;
String suffix;
//根据不同情况获取头像链接前缀
   if (transfer.getToOther().equalsIgnoreCase("ali-to-qiniu")) {
prefix = qiniuStorage.getEndpoint() + "/";

} else if (transfer.getToOther().equalsIgnoreCase("qiniu-to-ali")) {
String url = aliStorage.getEndpoint();
prefix = url.substring(0, 7) + aliStorage.getBucketName() + "." + url.substring(7) + "/";
} else {
return "failed";
}

List<BasicVo> studentList = studentDaoService.findAll();
for (BasicVo basicVo : studentList) {
//获取头像后缀
       Student student = (Student) basicVo;
int index = student.getImage().lastIndexOf("/");
suffix = "user/images" + student.getImage().substring(index);
//迁移的同时更新数据库中的内容
       student.setImage(prefix + suffix);
studentDaoService.update(student);
}
return "success";
}

主要是在迁移数据后同时更改数据库中url的内容,实现数据库中存放的和云存储中存放的相匹配.

运行结果亲测有效,能够完成任务要求的功能.

2.实现通过修改配置文件切换使用哪种云存储

思路基本和以上相同,首先将两种云存储的上传文件和删除文件都封转在一个类中,然后增加一个判断字段,字段采用不同的值,就使用不同的存储方式

具体代码不贴了,代码不复杂,就是一个if语句加上异常处理

配置文件中的内容,通过更改choice的值决定使用哪种云存储.

3.简单测试两种云存储方式上传文件的效率

选择一个不到一兆的文件

阿里云上传文件时间结果如下:

七牛云上传文件时间结果如下:

可以看到七牛云的上传文件的效率要略高于阿里云,同时我也发现了网络情况对整体效率的影响也很大,比如同样是这个文件,同样采用七牛云上传,时间可以分别达到20000ms+,50000ms+,甚至90000ms+,但是这只是最简单的上传方式,如果采用分片上传应该效率会更高一些.

4.对第三方API可能出现的异常进行梳理并处理

处理的方式主要是捕捉异常并记录日志,将第三方API集中放在一个包中,配置log4j.properties文件,使的该包下的所有类产生的日志单独存放在一个文件中,每天保存一个文件.这样编写脚本时只需要抓取该日志文件下的数据,记录出错的数目和全部的数目,两者一比较就可以得出第三方API的可靠率,同时记录错误日志时要记清楚异常发生的种类和方法,如果有状态码还要记录状态码等方便调试.如图:

二.明天计划完成的事情

1.将项目部署到服务器上,编写脚本,能够记录第三方API的出错率

2.了解缩略图,防盗链的相关知识,比较两种云存储的性能.

3.结束任务七,如果有时间,了解任务八

三.遇到的问题

暂无

四.收获

以上

五.任务进度情况

明天完成任务,禅道链接:http://task.ptteng.com/zentao/project-task-259-unclosed.html

已经延期,本来预计是一周.


返回列表 返回列表
评论

    分享到