首页 > 其他分享 >图片预加载需要token认证的地址处理

图片预加载需要token认证的地址处理

时间:2023-07-21 16:44:46浏览次数:39  
标签:const img URL imgList request 认证 token 加载

1.添加函数修改img的属性;

/**
 * 
 * @param {*} idName 传入的id,获取改img的dom,添加相应的数学
 */
export const proxyImg = (idName) => {
  const img = document.getElementById(idName || 'img');
  const url = img.getAttribute('authsrc');
  const request = new XMLHttpRequest();
  request.responseType = 'blob';
  request.open('get', url, true);
  request.setRequestHeader('x-access-token', localStorage.getItem('x-access-token')); // 换成自己的token
  request.onreadystatechange = e => {
    if (request.readyState == XMLHttpRequest.DONE && request.status == 200) {
      img.src = URL.createObjectURL(request.response);
      img.onload = () => {
        URL.revokeObjectURL(img.src);
      }
    }
  };
  request.send(null);
}

2.处理图片,这里已图片list进行处理为例;

const { proxyImg } = require('@/utils/utils');
import { isEmpty } from 'lodash';

/**
   * 
   * @param {*} imgList 传入的img 是数组 [{fileId: 3318310, fileName: '一张图片', fileSize: "982.00KB" , fileUrl: "/staticResource/images/一张图片.jpg", ...},{}]
   * @param {*} field 传入的id,作用是获取img的dom
   */
  const dealImgData = (imgList: any[], field: String) => {
    if (!isEmpty(imgList)) { // 判断imgList是否为空
      imgList.forEach((el, index) => {
        // 为什么又判断,就是解决不显示的问题, field都要传......
        if(field) {
          proxyImg(`img${field}${index}`)
        }
      });
    }
  }

 3.调用函数;

  dealImgData('传入的img的数组', '传入id,随便传,在当前页面是唯一值就OK了’);
  备注:可以在componentDidUpdate中调用,也可以在useEffect中调用

备注:

一般加载图片会用到img标签,添加src属性,如下所示:

<img src="imgUrl" />

但是因为需要在get请求头中加入token信息,不能直接将后台返回的图片url直接添加到src 后端返回二进制流,我们需要将二进制流以图片的形式显示在页面中

看到二进制,可以将responseType 设置为 blob


URL.createObjectURL()

URL.createObjectURL()  静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。

URL.revokeObjectURL()

URL.revokeObjectURL() 静态方法用来释放一个之前已经存在的、通过调用 URL.createObjectURL() 创建的 URL 对象。当你结束使用某个 URL 对象之后,应该通过调用这个方法来让浏览器知道不用在内存中继续保留对这个文件的引用了。

标签:const,img,URL,imgList,request,认证,token,加载
From: https://www.cnblogs.com/dreamtt/p/17571730.html

相关文章

  • SAP UI5 应用启动时加载的 flpSandbox.html 文件有什么作用
    在SAPUI5应用程序的开发和测试阶段,我们经常会使用一个特殊的HTML文件,名为flpSandbox.html。这个文件主要用于在本地环境中模拟FioriLaunchpad的环境,以便于开发者在没有真实SAP系统支持的情况下进行开发和调试。这个文件的源代码可以在笔者这套教程里找到:SAPFioriEl......
  • jquery手机端下拉加载更多列表
    实现jquery手机端下拉加载更多列表概述在这篇文章中,我将教会你如何使用jQuery实现手机端的下拉加载更多列表功能。这个功能常见于一些移动端的应用或网页,它允许用户在列表末尾向下拉动屏幕时自动加载更多的内容。在本教程中,我们将按照以下步骤实现这个功能:监听页面滚动事件检......
  • Spring Boot配置文件加载顺序
    项目内部配置文件springboot启动会扫描一下位置application.properties或者application.yml文件作为springboot的默认配置文件1、file:./config/2、file:./3、classpath:/config/4、classpath:/加载顺序可以通过启动命令spring.config.location修改java-jarspring-boot-......
  • Canarytokens的基本使用
    https://www.canarytokens.org/generateSensitivecommandtoken当某些敏感的windows程序运行时可以给指定的邮箱发送警报。其会生成一个注册表文件,导入注册表中就会监视指定程序的运行,然后在执行程序后向canarytoken网站回传警报信息,并向指定邮箱发送警报邮件。WindowsRegi......
  • clion申请教育认证
    clion申请教育认证1、注册jetbrains账号jetbrains注册账号网站链接邮箱没有限制,qq邮箱即可,注册时候会给qq邮箱发送邮件,前往qq邮箱进行确认即可,如下图。2、教育认证点击注册完页面的Applyforafreestudentorteacherlicense选项或者跳转教育认证https://www.jetbrain......
  • Android Glide加载完成
    AndroidGlide加载完成在Android应用程序中,经常需要加载网络上的图片并显示在应用的界面上。为了提高加载图片的性能和效率,Android开发者可以使用Glide这个强大的图片加载框架。什么是Glide?Glide是一个开源的图片加载库,专门用于在Android应用程序中加载网络上的图片。它提供了简......
  • 从输入URL到页面加载完成的过程中都发生了什么
      首先,对于http肯定是有客户端和服务器的,在这个语境中,客户端和服务器本质上也都是一个软件,实现了http协议相关标准的软件。客户端一般由都是由浏览器充当,也就是说,在浏览器中实现了http客户端的相关功能。而服务器的实现就多种多样啦,我们可以用java写servlet,c#写ASP.net,还有php,r......
  • Visual Studio新建项目配置好opencv环境,下次打开这个项目后属性管理器显示未加载visua
    配置opencv环境,可参考这篇博客:(82条消息)opencv之visualstudio开发环境配置(属性管理器+环境变量一劳永逸方便开发的配置方式)_opencv官网下载_仙魁XAN的博客-CSDN博客如出现打开这个项目后属性管理器显示未加载visualC++项目,可参考如下方法:1.解决方法:文件→打开→项目/......
  • 2023年9月天津/郑州/深圳DAMA-CDGA/CDGP认证考试报名
    据DAMA中国官方网站消息,2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启,相关事宜通知如下: 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA)数据治理专家(CertifiedDataGovernanceProfessional,CDGP) 考试时间: CDGA:2023......
  • 华为认证 | 拿下HCIE,需要多久?
    有很多人想学习HCIE,但又不知道什么时候能学会,在这小编为大家详细介绍一下HCIE多久学会?其实有很多因素影响学习的时间,比如有个人基础、学习时间、学习能力等等原因。跟我们学其他的知识是一样的。有的人考HCIE,几个月考到,有的人需要半年或1年以上的时间考到,甚至好几年没过的也有。每......