熬夜会秃头——beta冲刺Day5

这个作业属于哪个课程 2301-计算机学院-软件工程社区-CSDN社区云
这个作业要求在哪里 团队作业—beta冲刺+事后诸葛亮-CSDN社区
这个作业的目标 记录beta冲刺Day5
团队名称 熬夜会秃头
团队置顶集合随笔链接 熬夜会秃头——Beta冲刺置顶随笔-CSDN社区

一、团队成员会议总结

1、成员工作进度

组员 今日进展:    耗时(min) 存在的问题/遇到的困难: 明日计划: 心得体会:
陈少桐 完成了桶与文件的衔接 200 vue2,vue3混用导致页面渲染不上数据 完成剩余的接口 深刻理解了vue2与vue3之间的差别,可以利用不同的方式进行页面之间的参数传递
梁菲汎 完成了登陆的接口 200 完成剩余的接口 要加紧完成剩余接口的编写,在编写接口的同时加深了对axios的理解,能够比较熟练地应用axios完成前后端的联调
陈知菲

完成文件下载功能在分布式架构下的集成

200

遇到问题:

使用Feign调用本地下载文件接口时,接收不到其文件流

解决:

为response添加如下请求头

response.reset();
response.addHeader("Content-Disposition",
        "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));

并将response的outputStream转换为BufferedOutputStream写入字节

bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
bufferedOutputStream.write(bytes, 0, bytes.length);
bufferedOutputStream.flush();
bufferedOutputStream.close();

完成文件备份的逻辑

学会了利用cGetService拉取服务列表,调取Feign将文件以流的形式写回response中返回以及文件的下载缓存逻辑
李恒欣 进行功能调试,完善已实现的功能模块,完成对数据库结构的修改 90 完成剩余功能的实现,并编写相应接口 在实现文件操作相关功能时,学习Redis的使用,巩固数据库的使用操作
邱思源 进行接口测试,调查用户使用情况 50 在获取分片文件的MD5时不是很熟练 进行最后的接口测试,力求将测试做的更全面 后端人员提供的文件上传接口中涉及到MD5加密算法,可以用该算法验证文件数据是否被修改,提高安全性
宋芳鑫 进一步完善web端 60 需要根据用户反馈对前端功能进行调整 完善web端功能,完善业务逻辑 前端部分是与用户接触最直接的一部分,在页面交互功能实现、业务逻辑实现过程中需要参考用户反馈
张一凡 进行前端单元测试,跟进用户使用情况 55 进行最后的单元测试,根据用户反馈对相关部分着重测试 前端部分的测试除了需要全面以外,还需要重点关注用户反馈中提及的部分,做到点面结合
林承桢 编写测试文档,根据用户使用情况和反馈完成用户使用调查报告 45 将用户使用情况转化为书面表达需要对用户需求有深入理解 继续跟进用户使用情况的调查,完善调查报告 用户反馈是动态变化的,会根据实现的不同发生改变,因此需要不断地跟进,将反馈交予开发人员,在一次次修改中将业务完善。
黄才栋 辅助进行App端的开发,完成剩余接口的对接 85 辅助App端开发,完成剩余功能的实现或修改 在前后端接口对接部分越发熟练,对开发工具的使用相比刚接触时已经有了长足进步
谢怀广 核对已完成代码规范并制作项目燃尽图、记录工作进度 30 核对新增代码规范、制作项目燃尽图、记录工作进度 在一次次核对代码规范的过程中看到团队取得的进展,在制作项目燃尽图时看到项目离完成越来越近,整个团队的配合也更加默契

2、工作记录展示

熬夜会秃头——beta冲刺Day5_第1张图片

熬夜会秃头——beta冲刺Day5_第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 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会议照片

熬夜会秃头——beta冲刺Day5_第3张图片

二、PM报告

1. 工作进度估计

任务总量 已完成工作量 剩余工作量
59 43 16

2、燃尽图

熬夜会秃头——beta冲刺Day5_第4张图片

3. 工作总量变化

熬夜会秃头——beta冲刺Day5_第5张图片

4. 项目最新进展

熬夜会秃头——beta冲刺Day5_第6张图片

熬夜会秃头——beta冲刺Day5_第7张图片

你可能感兴趣的:(团队开发)