探索前端图片如何携带token进行验证

这篇具有很好参考价值的文章主要介绍了探索前端图片如何携带token进行验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

图片在前端开发中扮演了重要的角色,它们不仅仅是美观的元素,还可以传递信息和激发用户的兴趣。随着应用场景的增多,前端开发人员就需要在图片加载过程中携带验证的信息。如 token,用于身份验证、权限控制等方面。通过在图片的 URL 或请求头中携带 token 信息,从而实现图片信息的安全传输。


实现思路

  1. 创建一个名为 tokenImg 的组件,该组件用于显示图片并支持预览功能;
  2. 在组件的模板中,使用 <img> 标签来显示图片,或使用 element-ui<el-image> 标签进行图片预览;
  3. 在组件的属性中,接收图片的 URL 地址 (imgUrl)、图片类型 (imgType)、图片的宽度 (width) 和高度 (height);
  4. 在组件的数据中,定义预览图片列表 (previewList) 和预览图片路径 (previewpath);
  5. 实现两个方法 viewModel()preViewModel() 分别用于仅预览图片和带缩略图预览;
  6. viewModel() 方法中,通过调用下载文件的 API (downloadFileApi) 并根据返回的文件内容创建 URL 对象,将图片 URL 赋值给 <img> 标签的 src 属性;
  7. preViewModel() 方法中,同样调用下载文件的 API,将返回的文件内容创建 URL 对象,并将 URL 添加到预览图片列表中;
  8. 使用 watch 监听 imgUrl 属性的变化,在变化时根据 imgType 属性的值来调用对应的方法;
  9. 在组件的 mounted() 钩子中,根据初始的 imgType 属性值来调用对应的方法;
  10. main.js 文件中将 tokenImg 组件注册为全局组件,以便在其他地方使用;
  11. 在需要使用该组件的地方,使用 <TokenImg> 标签,并传递相应的属性(如图片 URL、图片类型、宽度和高度);
    这样,你可以在前端中使用 tokenImg 组件来显示带有 Token 的图片,并支持预览功能。注意确保在组件使用时传递正确的图片 URL、类型、宽度和高度。

封装文件

<template>
  <div>
    <!-- 显示图片 -->
    <img ref="img" :style="{width:width,height:height}" v-if="imgType == 'view'" />
    <!-- 使用element-ui的el-image进行图片预览 -->
    <el-image :style="{width:width,height:height}" ref="previewimg" v-if="imgType == 'preView'" :src="previewpath"
      :preview-src-list="previewList"></el-image>
  </div>
</template>
<script>
// 引入的接口文件
import { downloadFileApi } from "@/api/publicApi/enumeration";
export default {
  name: "token-img",
  props: {
    // 图片的URL地址
    imgUrl: {
      type: String,
    },
    // 图片类型,可选为'view'(仅预览图片)或'preView'(可点击预览)
    imgType: {
      type: String,
      default: "view",
    },
    // 图片的宽度
    width: {
      type: String,
    },
    // 图片的高度
    height: {
      type: String,
    },
  },
  data() {
    return {
      // 预览图片列表
      previewList: [],
      // 预览图片路径
      previewpath: "",
    };
  },
  methods: {
    //仅预览图片
    viewModel() {
      const img = this.$refs.img;
      // 调用下载文件的API并根据返回的文件内容创建URL对象
      downloadFileApi(this.imgUrl).then((res) => {
        img.src = URL.createObjectURL(res);
        img.onload = () => {
          URL.revokeObjectURL(img.src);
        };
      });
    },
    //带缩略图预览
    preViewModel() {
      downloadFileApi(this.imgUrl).then((res) => {
        // 调用下载文件的API并根据返回的文件内容创建URL对象
        this.previewpath = URL.createObjectURL(res);
        this.previewList.push(this.previewpath);
      });
    },
  },
  watch: {
    // 监听imgUrl变化
    imgUrl() {
      if (this.imgType == "view") {
        this.viewModel();
      } else if (this.imgType == "preView") {
        this.preViewModel();
      }
    },
  },
  mounted() {
    if (this.imgType == "view") {
      this.viewModel();
    } else if (this.imgType == "preView") {
      this.preViewModel();
    }
  },
};
</script>

引入的接口文件

responseType: "blob" 表示希望以二进制形式接收响应数据。这在处理文件下载或者需要以二进制形式处理响应数据的情况下非常有用。通过将 responseType 设置为 blob,可以确保响应数据以 blob对象的形式返回,然后可以进一步处理或者保存到本地。

export function downloadFileApi(imgUrl) {
  return request({
    url: "/api/file/examine-preview"+imgUrl,
    method: "get",
    responseType: "blob",
  });
}

main.js

// 将其注册为全局组件
import TokenImg from "@/components/tokenImg";
Vue.component('TokenImg', TokenImg)

使用文件

<TokenImg :width="`50px`" :height="`50px`" :imgUrl="YourUrl" :imgType="`preView`"/>

实现效果

发起请求

探索前端图片如何携带token进行验证,组件封装,前端,vue

渲染查看

探索前端图片如何携带token进行验证,组件封装,前端,vue


拓展

一、微信小程序中实现该操作

封装文件 ---- .js

// 引入服务器请求封装的模块
const server = require('../../utils/server.js');
Component({
  // 组件的内部数据
  data: {
    previewPath: "", // 预览图片路径
  },
  // 组件的对外属性,是属性名到属性设置的映射表
  properties: {
    imgUrl: { // 图片的URL地址
      type: null,
      observer: 'fetchData' // 监听imgUrl属性的变化,触发fetchData方法
    },
    imageWidth: { // 图片的宽度
      type: String,
    },
    imageHeight: { // 图片的高度
      type: String,
    },
  },
  // 组件的方法,包括事件响应函数和任意的自定义方法
  methods: {
    // 发起请求获取图片数据
    fetchData() {
      let {
        imgUrl
      } = this.properties;
      console.log(imgUrl);
      if (typeof imgUrl === 'string') {
        imgUrl = [imgUrl]; // 如果是字符串,转化为数组
      }
      // 处理多张图片
      const imagePromises = imgUrl.map(url => {
        return new Promise((resolve, reject) => {
          const imageUrl = `http://192.168.0.6666/${url}`;
          server.request({
            url: imageUrl,
            responseType: 'arraybuffer',
            success: (res) => {
              const base64 = wx.arrayBufferToBase64(res.data);
              resolve(`data:image/png;base64,${base64}`);
            },
            fail: (error) => {
              reject(error);
            }
          });
        });
      });
      // 处理多张图片的 Promise
      Promise.all(imagePromises)
        .then(images => {
          this.setData({
            previewPath: images,
          });
        })
        .catch(error => {
          console.error(error);
        });
    },

    // 点击预览图片
    previewImageOn(e) {
      const {
        previewpath
      } = e.target.dataset; // 解构获取预览图片URL
      wx.previewImage({ // 调用微信预览图片的API
        urls: [previewpath], // 需要预览的图片URL列表
      });
    },
  }
});

封装文件 ---- .wxml

<view>
  <block wx:for="{{previewPath}}" wx:for-index="index">
    <image bindtap="previewImageOn" data-previewPath="{{item}}" src="{{item}}" mode="aspectFill" 
    style="width:{{imageWidth}};height:{{imageHeight}};" key="{{index}}" />
  </block>
</view>

app.json 全局引入

"usingComponents": {
  "token-img": "./components/tokenImg/tokenImg"
},

page.json 全局引入

{
    "usingComponents": {
        "token-img": "./components/tokenImg/tokenImg"
    }
}

使用文件

<token-img imageWidth="100%" imageHeight="170rpx" imgUrl="{{details.tailImg}}"></token-img>

实现效果

探索前端图片如何携带token进行验证,组件封装,前端,vue


二、下载文件携带 token

第一种方式:手写实现

//下载方法
getBgdzByGcsj(row) {
  // 通过接口下载文件
  downloadFileApiDown(row.bgdz).then((res) => {
    // 将文件流转换为下载链接
    const downloadUrl = URL.createObjectURL(res);
    // 创建一个<a>标签
    const link = document.createElement("a");
    // 设置链接的URL为下载链接
    link.href = downloadUrl;
    // 设置下载的文件名为"报表管理.xls"
    link.download = "报表管理.xls";
    // 隐藏<a>标签
    link.style.display = "none";
    // 将<a>标签添加到页面的<body>中
    document.body.appendChild(link);
    // 触发<a>标签的点击事件,开始下载
    link.click();
    // 下载完成后删除<a>标签
    document.body.removeChild(link);
  });
}

第二种方式:使用插件(file-saver

file-saver 是一个 JavaScript 库,用于在浏览器中保存文件。它提供了一种简单的方法来生成并保存文件,而不需要服务器参与。使用 file-saver 插件,你可以轻松地在前端生成和下载文件,无需发送文件请求到服务器和返回文件链接,大大简化了文件下载的过程。

file-saver 插件的主要功能是将通过 Blob 对象生成的文件下载链接保存到浏览器的下载路径中。它提供了以下几种方法:

1. saveAs 方法

保存文件到本地。你可以使用 saveAs 方法来指定文件的内容和名称,然后将其保存到浏览器的下载路径。

2. save 方法

保存文件到本地,与 saveAs 方法类似,但不会弹出文件保存对话框。

3. createObjectURL 方法

创建 Blob 对象的 URL。通过 createObjectURL 方法,你可以将 Blob 对象转换为可供下载的 URL

4. revokeObjectURL 方法

释放之前创建的 URL。一旦文件下载完成,你可以使用 revokeObjectURL 方法来释放已经创建的 URL,以释放浏览器资源。

  • 安装

    npm install file-saver
    
  • 引入

    import { saveAs } from 'file-saver';
    
  • 使用文章来源地址https://www.toymoban.com/news/detail-619533.html

    // res 返回地址
    saveAs(res, '报表管理.xls');
    

到了这里,关于探索前端图片如何携带token进行验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • node后端+vue前端实现接口请求时携带authorization验证

    我们在写web项目时,后端写好接口,前端想要调用后端接口时,除了登录注册页面,所有的请求都需要携带authorization,这样是为了避免随意通过接口调取数据的现象发生。这是写web项目时最基础的点,但是也挺麻烦的,涉及前后端好几个地方的编码,经常忘记怎么写的,现在

    2024年02月02日
    浏览(40)
  • 前端如何压缩图片在进行上传给后端

       前端压缩图片我目前能想到的就是 通过canvas 改变图片的 画质去改变图片的大小。 解决方案如下: 1、首先获取图片的全部内容,然后转化为base64让他可以在页面上展示。 2、当我们获取到base64的图片的时候我们就可以获取图片的大小尺寸。 3、我们把这个图片放置到ca

    2024年01月19日
    浏览(34)
  • vue 预览 有token验证的 doc、docx、pdf、xlsx、csv、图片 并下载

    预览 doc我也不会 下载

    2024年02月09日
    浏览(33)
  • python中应用requests库模拟postman请求携带token,使用get和post方法请求头携带token

    实际开发中, Python程序中需要调用后台接口 ,充当前端, 后端规定请求头需要携带token postman中 form-data、x-www-form-urlencoded的区别_叫我峰兄的博客-CSDN博客 python requests 带请求头Token发起http请求_python request token_软件测试李同学的博客-CSDN博客 python发送requests请求时,使用登录的

    2024年02月16日
    浏览(36)
  • 纯前端实现图片验证码

    之前业务系统中验证码一直是由后端返回base64与一个验证码的字符串来实现的,想了下,前端其实可以直接canvas实现,减轻服务器压力。 子组件,允许自定义图片尺寸(默认尺寸为100 * 40)与验证码刷新时间(默认时间为60秒)。同时暴露绘制验证码方法drawPic(),允许父组件直接调用

    2024年02月06日
    浏览(31)
  • 前端生成图片验证码怎么做?

    ##题记:我们实现一个功能首先想一下我们需要做哪些工作,比如我们需要生成一个随机的图片验证码,我们需要一个就是点击事件获取验证码,通过接口我们去获取图片路径进行渲染就行,这里边还要牵扯一件事情就是获取一个随机数字,通过随机数字我们传给后端索取一

    2024年02月14日
    浏览(29)
  • SpringSecurity整合WebSocket并携带token

    目的 导入SpringSecurity的SpringBoot项目,在连接WebSocket时进行token校验 实现 SpringBoot整合Websocket的相关知识就不过多赘述,本文主要介绍WebSocket权限校验相关 1. 前端 WebSocket连接 windowTag是生成的随机窗口唯一标识符,token是用户登录后生成的令牌token 当前端发起WebSocket连接请求时

    2024年02月04日
    浏览(23)
  • 在springBoot中使用JWT实现1.生成token,2.接收前端token进行身份认证,3.通过token获取对象信息

    第一步:引入依赖 第二步:创建工具类 在until包下创建TokenUntil类,用于生成token 利用id,和password作为参数生成token JWt为这个包下的对象 第三步:token使用 在向前端返回的数据对象中添加token属性  是serve层中调用工具类方法将生成的token放到返回的数据中 注意:这里获取到

    2024年02月04日
    浏览(46)
  • Vue3---请求拦截器携带token

    为什么要在请求拦截器携带Token? Token作为用户标识,在很多个接口中都需要携带Token才可以正确获取数据,所以需要在接口调用时携带Token。另外,为了统一控制采取请求拦截器携带的方案 如何配置? Axios请求 拦截器 可以在接口正式发起之前对请求参数做一些事情,通常Toke

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包