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

vue实现展示并下载后端返回的图片流

// 点击下载  

  downLoadCode() {
      const image = new Image();
      image.setAttribute("crossOrigin", "anonymous");
      image.onload = () => {
        const canvas = document.createElement("canvas");
        canvas.width = image.width;
        canvas.height = image.height;
        const context = canvas.getContext("2d");
        context.drawImage(image, 0, 0, image.width, image.height);
        const url = canvas.toDataURL("image/png"); // 得到图片的base64编码数据
        const a = document.createElement("a"); // 生成一个a元素
        const event = new MouseEvent("click"); // 创建一个单击事件
        a.download = `${this.rowData.deviceName}二维码`; // 设置图片名称(todo 根据你实际项目修改)
        a.href = url; // 将生成的URL设置为a.href属性
        a.dispatchEvent(event); // 触发a的单击事件
      };
      image.src = this.codeUrl;
    }

完整代码

<template>
  <el-dialog
    :destroy-on-close="true"
    :close-on-click-modal="false"
    :title="title"
    :visible.sync="dialogVisible"
    width="600px"
    @close="dialogVisible = false"
  >
    <div
      style="
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
      "
    >
      <img :src="codeUrl" class="codeImg" alt="" />
      <div class="download" @click="downLoadCode">
        <i class="iconfont if-xiazai" /><span>点击下载二维码</span>
      </div>
    </div>
  </el-dialog>
</template>

<script>
import { getQrCode } from "@/api/infoManage/deviceManage/deviceManage";
export default {
  data() {
    return {
      codeUrl: "",
      dialogVisible: false,
      title: "",
      rowData: {}
    };
  },
  methods: {
    showDialog(data) {
      this.dialogVisible = true;
      this.title = data.title;
      this.rowData = data.data;
      this.handleCode(data.data);
    },

    handleClose() {
      this.dialogVisible = false;
      this.codeUrl = "";
    },

    /**
     * 生成二维码
     * */
    handleCode(content) {
      let data = {
        content: content.id
      };
      getQrCode(data)
        .then(res => {
          const blob = new Blob([res.data], { type: "image/png" });
          this.codeUrl = window.URL.createObjectURL(blob);
        })
        .catch(err => {
          console.log(err);
        });
    },

    /**
     * 下载二维码
     * */
    downLoadCode() {
      const image = new Image();
      image.setAttribute("crossOrigin", "anonymous");
      image.onload = () => {
        const canvas = document.createElement("canvas");
        canvas.width = image.width;
        canvas.height = image.height;
        const context = canvas.getContext("2d");
        context.drawImage(image, 0, 0, image.width, image.height);
        const url = canvas.toDataURL("image/png"); // 得到图片的base64编码数据
        const a = document.createElement("a"); // 生成一个a元素
        const event = new MouseEvent("click"); // 创建一个单击事件
        a.download = `${this.rowData.deviceName}二维码`; // 设置图片名称
        a.href = url; // 将生成的URL设置为a.href属性
        a.dispatchEvent(event); // 触发a的单击事件
      };
      image.src = this.codeUrl;
    }
  }
};
</script>

<style lang="scss" scoped>
.download {
  font-size: 14px;
  font-family: MicrosoftYaHei;
  color: #1492ff;
  margin-bottom: 48px;
  cursor: pointer;
  text-align: center;
  display: flex;
  align-items: center;
  justify-content: center;
  i {
    margin-right: 5px;
  }
}
</style>

 


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

相关文章:

  • Springboot 整合 Java DL4J 打造金融风险评估系统
  • 深度学习:卷积神经网络的计算复杂度,顺序操作,最大路径长度
  • 【代码pycharm】动手学深度学习v2-05 线性代数
  • JavaScript中如何使用Promise处理异步操作?
  • 【阅读记录-章节1】Build a Large Language Model (From Scratch)
  • CPU执行指令的过程
  • uniapp 修改网页标题title
  • 【新人系列】Python 入门(十一):控制结构
  • ODC 如何精确呈现SQL耗时 | OceanBase 开发者工具解析
  • halcon3D gen_image_to_world_plane_map的图像高精度拼接技术
  • 计算机网络-MSTP基础实验一(单域多实例)
  • HTML、CSS与JavaScript基础
  • 云原生周刊:Kubernetes v1.32 要来了
  • golang开源框架:go开源验证框架validator
  • leetcode 面试150之 Z 字形变换
  • Solana应用开发常见技术栈
  • 高效服务器管理新选择:CasaOS轻NAS系统部署1Panel面板并实现远程访问
  • 如何用Excel批量提取文件夹内所有文件名?两种简单方法推荐
  • sql专场练习(二)(11-15)
  • Springboot之登录模块探索(含Token,验证码,网络安全等知识)
  • 微信小程序组件之swiper介绍
  • GeeRPC第一天 服务端与消息编码(1)
  • JAVA学习-练习试用Java实现“判断星期的英文缩写”
  • 汽车资讯新篇章:Spring Boot技术启航
  • 241118学习日志——[CSDIY] [ByteDance] 后端训练营 [06]
  • 除了电商平台,还有哪些网站适合进行数据爬取?