先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
/**
* 导出二维码
*
*/
@RequestMapping(value = “/exportQrcode”)
public void exportQrcode(HttpServletRequest request, HttpServletResponse response, ProQrcode proQrcode) throws IOException {
// Step.1 组装查询条件
// … 此处省略数据查询条件…
// 查询数据
List list = service.list(queryWrapper);
int width = 800;
if (StringUtils.isNotBlank(widthStr)) {
width = Integer.parseInt(widthStr);
}
byte[] data = genQrcodeImg(list, width);
zip(response, data);
}
/**
* 批量生产图片zip压缩包数据
* */
private byte[] genQrcodeImg(List list, int width) {
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream)) {
for (int i = 0; i < list.size(); i++) {
ProQrcode qrcode = list.get(i);
try {
// 添加到zip,设置文件名,后缀.png
zip.putNextEntry(new ZipEntry(String.format(“%d.%s.png”, i + 1, qrcode.getCode())));
// 查询是否配置了logo,如果有logo,则把logo添加到二维码中
BufferedImage logo = CustomerBrandCache.getLogo(qrcode.getCustomerBrandId());
QrConfig config = new QrConfig();
config.setWidth(width).setHeight(width);
if (logo != null) {
config.setImg(logo);
}
// 生成二维码图片
byte[] bytes = QrCodeUtil.generatePng(qrcode.getLinkUrl(), config);
// 将byte[]写入到压缩包中
IOUtils.write(bytes, zip);
zip.flush();
zip.closeEntry();
} catch (IOException e) {
log.error(“addQrcode,error:”, e);
}
}
return outputStream.toByteArray();
} catch (Exception e) {
log.error(“”, e);
}
return new byte[0];
}
/**
* 生成zip文件,设置响应头为文件下载
*/
private void zip(HttpServletResponse response, byte[] data) throws IOException {
response.reset();
response.addHeader(“Access-Control-Allow-Origin”, “*”);
response.addHeader(“Access-Control-Expose-Headers”, “Content-Disposition”);
response.setHeader(“Content-Disposition”, “attachment; filename=“qrcode.zip””);
response.addHeader(“Content-Length”, “” + data.length);
response.setContentType(“application/octet-stream; charset=UTF-8”);
IOUtils.write(data, response.getOutputStream());
}
- 通过
cn.hutool.extra.qrcode.QrCodeUtil
生成二维码图片,得到byte[]
- 通过
java.util.zip.ZipOutputStream
将byte[]
写入压缩包- 通过
java.io.ByteArrayOutputStream
返回完整的byte[]
- 全部写入完成后,得到完整的
byte[]
输出到HttpServletResponse
- 设置
HttpServletResponse
响应头数据,标记为文件下载
二、Vue前端调用后端接口实现下载
/**
* 导出二维码数据
*/
export const exportQrcode = async (name, params) => {
const data = await defHttp.get({ url: Api.exportQrcode, params, responseType: ‘blob’, timeout: 30000 }, { isTransformResponse: false })
if (!data) {
createMessage.warning(‘文件下载失败’)
return
}
if (!name || typeof name != ‘string’) {
name = ‘导出文件’
}
const blobOptions = { type: ‘application/octet-stream’ }
const fileSuffix = ‘.zip’
Vue
-
什么是MVVM?
-
mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合?
-
组件之间的传值?
-
Vue 双向绑定原理
-
描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?
-
虚拟 DOM 实现原理
-
Vue 中 key 值的作用?
-
Vue 的生命周期
-
Vue 组件间通信有哪些方式?
-
vue 中怎么重置 data?
-
组件中写 name 选项有什么作用?
-
Vue 的 nextTick 的原理是什么?
-
Vuex 有哪几种属性?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
1024c (备注前端)**
[外链图片转存中…(img-rxS2ynow-1713678302708)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!