这个作业属于哪个课程 | 2301-计算机学院-软件工程社区-CSDN社区云 |
---|---|
这个作业要求在哪里 | 团队作业—beta冲刺+事后诸葛亮-CSDN社区 |
这个作业的目标 | 记录beta冲刺Day5 |
团队名称 | 熬夜会秃头 |
团队置顶集合随笔链接 | 熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 |
一、团队成员会议总结
1、成员工作进度
组员 | 今日进展: | 耗时(min) | 存在的问题/遇到的困难: | 明日计划: | 心得体会: |
陈少桐 | 完成了桶与文件的衔接 | 200 | vue2,vue3混用导致页面渲染不上数据 | 完成剩余的接口 | 深刻理解了vue2与vue3之间的差别,可以利用不同的方式进行页面之间的参数传递 |
梁菲汎 | 完成了登陆的接口 | 200 | 无 | 完成剩余的接口 | 要加紧完成剩余接口的编写,在编写接口的同时加深了对axios的理解,能够比较熟练地应用axios完成前后端的联调 |
陈知菲 | 完成文件下载功能在分布式架构下的集成 | 200 | 遇到问题: 使用Feign调用本地下载文件接口时,接收不到其文件流 解决: 为response添加如下请求头 并将response的outputStream转换为BufferedOutputStream写入字节 | 完成文件备份的逻辑 | 学会了利用cGetService拉取服务列表,调取Feign将文件以流的形式写回response中返回以及文件的下载缓存逻辑 |
李恒欣 | 进行功能调试,完善已实现的功能模块,完成对数据库结构的修改 | 90 | 无 | 完成剩余功能的实现,并编写相应接口 | 在实现文件操作相关功能时,学习Redis的使用,巩固数据库的使用操作 |
邱思源 | 进行接口测试,调查用户使用情况 | 50 | 在获取分片文件的MD5时不是很熟练 | 进行最后的接口测试,力求将测试做的更全面 | 后端人员提供的文件上传接口中涉及到MD5加密算法,可以用该算法验证文件数据是否被修改,提高安全性 |
宋芳鑫 | 进一步完善web端 | 60 | 需要根据用户反馈对前端功能进行调整 | 完善web端功能,完善业务逻辑 | 前端部分是与用户接触最直接的一部分,在页面交互功能实现、业务逻辑实现过程中需要参考用户反馈 |
张一凡 | 进行前端单元测试,跟进用户使用情况 | 55 | 无 | 进行最后的单元测试,根据用户反馈对相关部分着重测试 | 前端部分的测试除了需要全面以外,还需要重点关注用户反馈中提及的部分,做到点面结合 |
林承桢 | 编写测试文档,根据用户使用情况和反馈完成用户使用调查报告 | 45 | 将用户使用情况转化为书面表达需要对用户需求有深入理解 | 继续跟进用户使用情况的调查,完善调查报告 | 用户反馈是动态变化的,会根据实现的不同发生改变,因此需要不断地跟进,将反馈交予开发人员,在一次次修改中将业务完善。 |
黄才栋 | 辅助进行App端的开发,完成剩余接口的对接 | 85 | 无 | 辅助App端开发,完成剩余功能的实现或修改 | 在前后端接口对接部分越发熟练,对开发工具的使用相比刚接触时已经有了长足进步 |
谢怀广 | 核对已完成代码规范并制作项目燃尽图、记录工作进度 | 30 | 无 | 核对新增代码规范、制作项目燃尽图、记录工作进度 | 在一次次核对代码规范的过程中看到团队取得的进展,在制作项目燃尽图时看到项目离完成越来越近,整个团队的配合也更加默契 |
2、工作记录展示
下载文件接口
@GetMapping("/getFile")
public void getFile(@RequestParam String bucketId,
@RequestParam String fileName,
@RequestParam(required = false) Integer version,
@RequestParam Integer isInternal,
HttpServletResponse response) {
if (isInternal == 1) {
getService.getFile(bucketId, fileName, version, response);
} else {
cGetService.getFile(bucketId, fileName, version, response);
}
}
cGetService拉取服务列表,调取Feign将文件以流的形式写回response中返回
@Override
public void getFile(String bucketId, String fileName, Integer version, HttpServletResponse response) {
String uri = servicesUtil.distributeURI(fileName);
Response response1;
try {
response1 = testFeign.getFile(new URI(uri), bucketId, fileName, version, 1);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
try {
InputStream inputStream = response1.body().asInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
response.setHeader("Content-Disposition", response1.headers().get("Content-Disposition").toString().replace("[", "").replace("]", ""));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
int length = 0;
byte[] temp = new byte[1024 * 10];
while ((length = bufferedInputStream.read(temp)) != -1) {
bufferedOutputStream.write(temp, 0, length);
}
bufferedOutputStream.flush();
bufferedOutputStream.close();
bufferedInputStream.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
本地的文件下载逻辑
若缓存中存在文件(以base64B编码形式存储),则解码,否则读取文件以流的形式返回
@Override
public void getFile(String bucketId, String fileName, Integer version, HttpServletResponse response) {
BufferedOutputStream bufferedOutputStream = null;
try {
response.reset();
response.addHeader("Content-Disposition",
"attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
if (version == null) {
String base64 = fileCache.getFile(bucketId, fileName, response, 1);
if (base64 != null) {
byte[] bytes = Base64.getDecoder().decode(base64);
response.setContentLength(bytes.length);
bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
bufferedOutputStream.write(bytes, 0, bytes.length);
bufferedOutputStream.flush();
bufferedOutputStream.close();
}
} else {
Map<String, Integer> nvMap = bucketCache.getFileSetByName(bucketId, 1);
Integer latestVersion = nvMap.get(FileProperty.realPath + bucketId + "/" + fileName);
int cnt = version;
while (latestVersion + cnt > 0) {
int curVersion = latestVersion + cnt;
String path = FileProperty.realPath + bucketId + "/" + fileName + "/" + curVersion;
//写入response
if (Files.exists(Paths.get(path))) {
bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
int len;
while ((len = bis.read()) != -1) {
bufferedOutputStream.write(len);
}
break;
}
cnt--;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3、SCRUM会议照片
二、PM报告
1. 工作进度估计
任务总量 | 已完成工作量 | 剩余工作量 |
59 | 43 | 16 |
2、燃尽图
3. 工作总量变化