熬夜会秃头——beta冲刺Day5

这个作业属于哪个课程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. 项目最新进展

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/218303.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录刷题题Day5

刷题的第五天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C / Python Day5 任务 ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 1 哈希表理…

Db2的Activity event monitor在Db2 MPP V2上收集ROWS_INSERTED信息

注&#xff1a;本文不是讲解Db2 Activity event monitor&#xff0c;只是一个用法实践。要了解Activity event monitor&#xff0c;请参考 https://www.ibm.com/docs/en/db2/11.5?topicevents-activity-event-monitoring 。 环境 Red Hat Enterprise Linux release 8.8 (Oot…

“构建智慧城市,共享美好生活“2024杭州国际智慧城市展览会

智慧城市作为当今社会发展的必然趋势&#xff0c;正在被越来越多的企业和观众所关注。为了进一步推动智慧城市的发展&#xff0c;2024杭州智慧城市展览会将于4月份在杭州国际博览中心盛大召开。目前&#xff0c;招商工作已近半程&#xff0c;大批国内外知名企业踊跃报名&#x…

会话技术(Cookie与Session)

会话技术 一.作用域对象 1.作用域对象概述 有作用域的对象作用域对象可以用来存储数据并且可以在不同的组件之间进行传递传递的范围受作用域的限制&#xff0c;一旦超过范围&#xff0c;立即失效 2.两个作用域对象 作用域对象描述request对象作用范围是一次请求ServletCon…

3D Gaussian Splatting的使用

3D Gaussian Splatting的使用 1 下载与安装2 准备场景样本2.1 准备场景照片2.1.1 采集图片2.1.2 生成相机位姿 3 训练4 展示 1 下载与安装 今年SIGGRAPH最佳论文&#xff0c;学习了一下&#xff0c;果然厉害&#xff0c;具体论文原理就不说了&#xff0c;一搜都有&#xff0c;…

HOST文件被挟持,无法上网,如何解决。

问题&#xff1a; 晚上开机&#xff0c;突然发现无法联网&#xff0c;提示网络异常 解决&#xff1a; 首先网络诊断&#xff0c;host文件被劫持&#xff0c;修复后&#xff0c;仍然不行。 然后测试手机热点&#xff0c;发现仍然无法联网 尝试用火绒修复&#xff0c;无果。 所有…

安路Anlogic FPGA下载器的驱动安装教程

安路FPGA下载器驱动安装教程 安路FPGA下载器&#xff1a;EN-ALC10,是一款高性能FPGA下载线&#xff08;编程器&#xff09;&#xff0c;支持安路的开发软件TDS和全系列FPGA芯片下载编程&#xff0c;支持全速USB2.0与电脑进行数据通信&#xff0c;通过JTAG协议与FPGA进行程序下…

【mysql】基于binlog数据恢复指令和坑

文章目录 1.binlog相关配置是否开启binlogbinlog日志格式 2.导出binlog日志mysqlbinlog指令updateinsertdeletebinlog中的事件 3.数据恢复4.特别注意的坑为什么bash脚本执行mysqlbinlog&#xff0c;无法找到指令为什么执行mysqlbinlog&#xff0c;无法数据恢复 1.binlog相关配置…

【杂】解决关于mean(0)理解错误引发的程序bug

一、环境和解释器要一起配置好 invalid syntax 发生你在终端激活了一个环境&#xff0c;但 VSCode 依然使用之前的解释器的情况。 解释器设置影响了 VSCode 中运行 Python 脚本、调试、代码补全等功能的行为。VSCode 会根据你选择的解释器来执行这些操作。 二、关于mean&#x…

【c】序列中整数去重

数组中的元素不好直接删除&#xff0c;我们可以把重复的数做标记&#xff0c;将他赋值为0&#xff0c;然后正常打印数组&#xff0c;为0的跳过 #include<stdio.h> int main() {int n;scanf("%d",&n);int arr[n1];for(int i1;i<n;i){scanf("%d&quo…

fastadmin列表头部按钮批量上传视频

上传界面通过layui生成 index.html <a href="{:url(video/piliangadd)}" class="btn btn-success btn-piliangadd btn-dialog {:$auth->check(video/piliangadd)?:hide}" title="批量上传" ><i class="fa fa-plus">…

【力扣热题100】207. 课程表 python 拓扑排序

【力扣热题100】207. 课程表 python 拓扑排序 写在最前面207. 课程表解决方案&#xff1a;判断是否可以完成所有课程的学习方法&#xff1a;拓扑排序实现步骤Python 实现性能分析结论 写在最前面 刷一道力扣热题100吧 难度中等 https://leetcode.cn/problems/course-schedule…

关于如何解决问题?代码习惯。

警钟长鸣 从师哥身上学到的东西&#xff1a; 关于如何解决问题&#xff1f; 1、沟通&#xff1a;有效的沟通&#xff0c;将问题描述清楚&#xff0c;让老师和师哥明白你出了什么问题&#xff0c;给出建议&#xff0c;很多时候一句良言胜过自己摸索很久 2、出现问题由浅入深地…

AI 大模型时代的计算机网络通信

下午跟朋友聊天&#xff0c;聊到编码和传输&#xff0c;兴致未尽&#xff0c;有必要继续说说有损传输&#xff0c;承接 从意义中恢复而不从数据包恢复。 在 AI 大模型催化下&#xff0c;网络通信方式将完全不同&#xff0c;依赖编码的柔性&#xff0c;有损传输将比 tcp/ip 更具…

android studio 打开flutter项目 出现 dart sdk is not configured

android studio 版本 flutter版本 解决方式 1 点击Open Dart setting 2 打勾Enable Dart support for the project 3 Dart SDK path 选择flutter/bin/cache/dart-sdk 4 打勾Enable Dart support for the following modules

JVM Optimization Learning(五)

一、JVM Optimization 1、G1 G1官网说明&#xff1a;Garbage First Garbage Collector Tuning The Garbage First Garbage Collector (G1 GC) is the low-pause, server-style generational garbage collector for Java HotSpot VM. The G1 GC uses concurrent and paralle…

电子学会C/C++编程等级考试2022年09月(四级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:最长上升子序列 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … &l…

Android中的动态代理详解

在说动态代理之前&#xff0c;先来简单看下代理模式。代理是最基本的设计模式之一。它能够插入一个用来替代“实际”对象的“代理”对象&#xff0c;来提供额外的或不同的操作。这些操作通常涉及与“实际”对象的通信&#xff0c;因此“代理”对象通常充当着中间人的角色。 代…

WPF halcon 机器视觉

1 鼹鼠的故事第14集 鼹鼠与智能房 鼹鼠无意中坐进了一辆小汽车&#xff0c;小汽车开进了一所智能住宅。鼹鼠看到房主在智能房里&#xff0c;享受着现代化的服务。趁着主人看电视的时候&#xff0c;鼹鼠也享用了一顿丰盛的智能晚餐。 小编大胆的畅想&#xff0c;这些食物 前一秒…

论文解读--PointPillars- Fast Encoders for Object Detection from Point Clouds

PointPillars--点云目标检测的快速编码器 摘要 点云中的物体检测是许多机器人应用(如自动驾驶)的重要方面。在本文中&#xff0c;我们考虑将点云编码为适合下游检测流程的格式的问题。最近的文献提出了两种编码器;固定编码器往往很快&#xff0c;但牺牲了准确性&#xff0c;而…