熬夜会秃头——beta冲刺Day5

团队成员在beta冲刺期间完成了Vue、axios接口、Feign调用等任务,涉及文件下载、MD5验证、前端测试与后端接口开发。同时,项目管理通过Scrum会议跟踪工作进度和燃尽图更新,展示了项目的实时进展。
摘要由CSDN通过智能技术生成

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

一、团队成员会议总结

1、成员工作进度

组员今日进展:   耗时(min)存在的问题/遇到的困难:明日计划:心得体会:
陈少桐完成了桶与文件的衔接200vue2,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、工作记录展示

下载文件接口

@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. 工作进度估计

任务总量已完成工作量剩余工作量
594316

2、燃尽图

3. 工作总量变化

4. 项目最新进展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值