img src 或者 background:url(”) 中的地址是接口, 如何设置请求头

问题背景:

项目之前传递token的方式,是通过cookie来传的。(cookie中的数据默认会跟着所有请求发送)因谷歌浏览器80版本之后,SameSite属性默认值改为Lax后,导致不同站下的cookie写不进去了。所以更改了传递token的方式,通过请求头传递。设置了axios的请求头后,其他的接口访问都没有问题,唯有图片这种直接通过src或者background:url()的方式。接口就加载请求了,加不上请求头。

解决方案

使用原生的XMLHttpRequest对象创建请求

background:url()方式

//react 代码如下
  componentDidMount () {
     // icon为请求接口地址 如:http://localhost:8080/files/download?fileName=photo/a.jpg
    const { icon } = this.props  
    this.getImage(icon)
  }
  
  getImage = (icon) => {
    let request = new XMLHttpRequest();
    request.responseType =  blob ;
    request.open( get , icon, true);
    request.setRequestHeader( Authorization ,  凭证信息 ); 
    request.onreadystatechange = e => {
      if (request.readyState == XMLHttpRequest.DONE && request.status == 200) { 
          // this.refElement 表明的是html中的元素
           this.refElement.style.backgroundImage= `url(${URL.createObjectURL(request.response)})` ;
        }
    };
    request.send(null);
  }

   // render中的代码
   <span ref={ref => (this.refElement = ref)} />

img src方式

  componentDidMount () { 
    const { icon } = this.props  
    this.getImage(icon)
  } 
  getImage = (icon) => {
    let request = new XMLHttpRequest();
    request.responseType =  blob ;
    request.open( get , icon, true);
    request.setRequestHeader( Authorization ,  凭证信息 ); 
    request.onreadystatechange = e => {
      if (request.readyState == XMLHttpRequest.DONE && request.status == 200) { 
          this.refElement.src = URL.createObjectURL(request.response);
          this.refElement.onload = () => {
                URL.revokeObjectURL(this.refElement.src);
          } 
        }
    };
    request.send(null);
  }

   // render中的代码
   <img  ref={ref => (this.refElement = ref)} />

注:
URL.createObjectURL()
URL.revokeObjectURL()
参考:https://segmentfault.com/a/1190000020366227?utm_source=tag-newest

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容