当前位置: 首页 > article >正文

SpringBoot+VUE(Ant Design Vue)实现图片下载预览功能

目录

背景

1.后端实现下载接口

2.前端请求实现

第一步:导入api

第二步:请求接口

3.前端展示实现

4.实现效果展示

5.总结


背景

这段时间通过SpringBoot+VUE(Ant Design Vue)框架做了一个项目,但是在图片下载,展示的时候在网上搜了好多方法都解决不了,最后发现虽然图片能下载了,但是没有正确赋值给前端字段,所以今天把这个坑分享出来,以免各位踩坑!

1.后端实现下载接口

以下代码是前端请求图片地址,需要传入一个图片的唯一标识符

@RequestMapping(value = "/download", method = RequestMethod.GET)
@Transactional
public void download(Thing thing, HttpServletResponse response) throws IOException {
   String fileUUID = thing.cover;
   if(StringUtils.isEmpty(fileUUID)) {
      return;
   }
   // 根据文件的唯一标识码获取文件
   File destFile = new File(uploadPath + File.separator + "image" + File.separator + fileUUID);
   // 设置输出流的格式
   ServletOutputStream os = response.getOutputStream();
   response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileUUID, "UTF-8"));
   response.setContentType("image/jpeg");

   // 读取文件的字节流
   os.write(FileUtil.readBytes(destFile));
   os.flush();
   os.close();
}

2.前端请求实现

以下是代码部分,

第一步:导入api

import { downloadApi } from '/@/api/thing';

第二步:请求接口

需要注意的是前端请求代码需要放在请求列表for循环里面

await downloadApi({
    cover: item.cover,
})
.then((res) => {
    item.cover = res.data;
    const reader = new FileReader();
    reader.onload = (e) => {
        this.cover = e.target.result; // 将base64编码的图片数据存储在Vue组件的data属性中
    };
    reader.readAsDataURL(new Blob([res.data], { type: 'image/jpeg' })); // 根据实际情况调整MIME类型
})
.catch((err) => {
    console.log(err);
});

item.cover = BASE_URL + '/api/thing/download?cover=' + item.cover;

3.前端展示实现

这一步是需要在table里面赋值属性

<template v-if="column.key === 'cover'">
    <img :src="record.cover" style="width: 50px; height: 50px" />
</template>

4.实现效果展示

5.总结

以上步骤就是vue前端通过请求后端二进制流预览图片的全过程,上面这个方法不止图片,视频都可以用这种方法进行预览。

喜欢的小伙伴请留下一个免费的点赞,关注,评论吧!


http://www.kler.cn/a/596937.html

相关文章:

  • 仿函数 VS 函数指针实现回调
  • 存算分离是否真的有必要?从架构之争到 Doris 实战解析
  • 关于网络中的超参数小记
  • RTOS系列文章(17)-- 为什么RTOS选择PendSV实现任务切换?(从硬件机制到RTOS设计的终极答案)
  • NocoBase 本周更新汇总:优化表格区块的列和操作
  • Vue 中的日期格式化实践:从原生 Date 到可视化展示!!!
  • 青少年编程与数学 02-011 MySQL数据库应用 10课题、记录的操作
  • 【微服务架构】SpringCloud(二):Eureka原理、服务注册、Euraka单独使用
  • 蓝桥杯备考:二分答案之路标设置
  • 掌握新编程语言的秘诀:利用 AI 快速上手 Python、Go、Java 和 Rust
  • AI大白话(六):强化学习——AI如何通过“试错“成为大师?
  • 隋卞做 隋卞一探 视频下载
  • 配置DHCP(centos+OUS)
  • QHDBO基于量子计算和多策略融合的蜣螂优化算法
  • Fiddler抓包工具最快入门
  • 人工智能之数学基础:矩阵条件数在线性方程组求解中的应用
  • 律师解读《无人驾驶航空器飞行管理暂行条例》第二十二条
  • illustrate:一款蛋白/核酸结构快速渲染为“卡通风格”的小工具
  • Vue学习笔记集--路由
  • vmware下linux无法上网解决方法