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

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.dtcms.com/a/83860.html

相关文章:

  • Java 大视界 -- Java 大数据在智能安防周界防范与入侵预警中的应用(148)
  • C++11之包装器
  • TensorFlow快速介绍
  • javaweb开发以及部署
  • Winform在工控行业对比Wpf的优势?
  • C语言【文件操作】详解中
  • ASP.NET Web的 Razor Pages应用,配置热重载,解决.NET Core MVC 页面在更改后不刷新
  • 细说卫星导航:测距定位原理
  • Linux-Ubuntu 系统学习笔记 | 从入门到实战
  • C# 调用 VITS,推理模型 将文字转wav音频调试 -数字人分支
  • Leetcode 刷题笔记1 图论part04
  • [思考记录]两则:宏观视角、理想化
  • #echarts#折线图#饼图
  • @JsonSerialize注解
  • 机器臂运动控制算法工程师面试
  • LVGL常用功能备忘
  • STM32基础教程——定时器
  • 天梯赛 L2-013 红色警报
  • 2025海外华文新媒体高级人才研修班在广西南宁举办
  • Java实体类(Javabean)-编程规范
  • 自动学习和优化过程,实现更加精准的预测和决策的智慧交通开源了
  • 神聖的綫性代數速成例題13. 非齊次方程組解的性質、非齊次方程組解的討論
  • python:music21 构建 LSTM+GAN 模型生成爵士风格音乐
  • [笔记] TinyWebServer编译及demo运行过程
  • 什么是PHP伪协议
  • 详细解释计算机系统中的大小端
  • Unity摄像机基本操作详解:移动、旋转与缩放
  • qt实现一个简单http服务器和客户端
  • 前端(vue)学习笔记(CLASS 5):自定义指令插槽路由
  • 熔断降级(Sentinel解决)