Angular Img标签自定义请求header Authorization

背景
是这样的需求,有一个web页面,里面图片的上传和预览来自于一个独立的文件服务器,对http的请求需要进行访问权限的设置,就是在请求的header里加一个Authorization的字段。上传好说直接添加一个header就行了,但是预览就比较麻烦了,因为img这个标签图片下载展示是浏览器自己实现的,没有办法去修改。

所以首先想到就是通过接口添加自定义header转发请求或者其他通过接口的方案了,那怎么通过前端页面去实现这个功能?

问题分析:img标签的src属性只能设置url,不能设置这次请求的header。既然这样,能不能通过别的方式先把图片下载下来然后再给img标签作展示,相当于把src属性的下载和展示分成了两步,先调用接口获取到了数据,然后再把数据给展示出来,也就是src里的值不是一个url地址而是一个数据流。

这样,首先通过Object.defineProperty定义一个authSrc属性用来替换src属性的值,然后在界面的dom加载完以后去再下载图片。

示例代码:

<img class="dimg" attr.authsrc="{{item.imgUrl}}">
// 当 Angular 初始化完组件视图及其子视图或包含该指令的视图之后调用
ngAfterViewInit() {this.loadImage();
}
/*** 通过认证加载图片*/
loadImage() {Object.defineProperty(Image.prototype, 'authsrc', {writable: true,enumerable: true,configurable: true})let imgs: any = document.getElementsByClassName('dimg');for (let index = 0; index < imgs.length; index++) {let img = imgs[index];let url = img.getAttribute('authsrc');let request = new XMLHttpRequest();request.responseType = 'blob';request.open('get', url, true);request.setRequestHeader('Authorization', `Bearer ${this.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);}
}

[参考]:
https://segmentfault.com/a/1190000020366227

Angular Img标签自定义请求header Authorization相关推荐

  1. CORS 请求未能成功_CORS 测试 提示错误 Reason: header authorization

    在使用 CORS 测试的时候,我们得到下面的错误提示: Cross-Origin Request Blocked: The Same Origin Policy disallows reading t ...

  2. 前端cookie 放到请求头_ajax请求携带cookie和自定义请求头header(跨域和同域)

    错误: 1.ajax请求时是不会自动带上cookie的,要是想让他带上的话,必须设置withCredential为true. 正确: 1.ajax同域请求下,ajax会自动带上同源的cookie: 2 ...

  3. php自定义请求headers,php通过header发送自定义数据方法

    本文将介绍如何通过header发送自定义数据.发送请求时,除了可以使用$_GET/$_POST发送数据,也可以把数据放在header中传输过去. 发送header: 我们定义了三个参数,token.l ...

  4. CORS跨域时axios无法获取服务器自定义的header信息 - 番外篇

    已解决CORS跨域时axios无法获取服务器自定义的header信息?! 先看代码: // 登录后的表单提交ajaxRegisterApi: function (form) { var key = l ...

  5. curl post请求 header host_(科普文)curl quot;可quot;得一切

    概述 前几天在微信群与"知名"技术博客芋道源码的作者芋艿.骚气的再见伐木机以及其他大佬们讨论了一个问题:通过哪些方式可以方便地测试 HTTP API,并且便于向他人分享 TEST ...

  6. drf-yasg 模块细节性说明(自定义请求体,自定义响应体,自定义响应Content-Type, 自定义文档接口标题)

    1.模块安装 pip install drf-yasg 2.模块配置 settings.py中写入以下配置: SWAGGER_SETTINGS = {'PERSIST_AUTH': True,'REF ...

  7. 拦截器获取请求参数post_「SpringBoot WEB 系列」RestTemplate 之自定义请求头

    [WEB 系列]RestTemplate 之自定义请求头 上一篇介绍了 RestTemplate 的基本使用姿势,在文末提出了一些扩展的高级使用姿势,本篇将主要集中在如何携带自定义的请求头,如设置 U ...

  8. angluar ajax实例,Angular服务Request异步请求的实例讲解

    首先这里我简单写个例子来方便您的理解 var request = { post: function() { var errorCallback = { error: function(f) { thi ...

  9. Ajax设置自定义请求头的两种方法

    用自定义请求头token为例 方法一 $.ajax({type: "post",url:"http://127.0.0.1:4564/bsky-app/template/ ...

最新文章

  1. HDOJ 4876 ZCC loves cards
  2. WeX5 Model 里data ,baasData 数据过滤条件清除 数据初始化
  3. python 获取li的内容_Python开发案例:爬取四川省统计局数据Matplotlib绘图
  4. Objective C 总结(十):Conventions
  5. 英业达软件测试工程师,「天津英业达软件测试工程师」面试招聘|工资待遇 - 看准网...
  6. 余承东生日朋友圈深夜连发五个“感恩”:这是一个难忘的日子
  7. Python爬取抖音用户相关数据(目前最方便的方法)
  8. Eclipse的部署项目时的配置
  9. python数据类型、if判断语句
  10. 【GCN+KG】基于知识图谱和图卷积神经网络的应用和开发
  11. Python基于Django在线音乐播放网站设计
  12. excel使用教程_如何系统地学习Excel?
  13. centos8安装ss发生错误failed to install pthon
  14. 2、图片亮度,对比度,饱和度,明度调整 transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
  15. Normalize异常报错
  16. JavaScrpit+Html实现“网页播放视频“效果(应用场景:腾讯PC端视频播放器、以及各视频网站页面开发设计)
  17. 国际化中英文切换,英文内容长度过长的解决问题
  18. kali为一加三(oneplus3)编译lineage15.1(安卓8.1)
  19. 老人与科技:解决老人的“数字鸿沟”,全世界都在努力!
  20. 三星2022款 The Frame 画壁电视 评测

热门文章

  1. Android数据备份(Android Data Backup)
  2. 2021年后一个算法工程师的门槛有多高?
  3. ViveInputUtility-手柄触摸3D物体(6)
  4. 【数论】关于质数的几个定理,用 latex 来表示数学公式
  5. 聚焦“教-学-评-测-练-管一体化”,推动新型人才培养
  6. FPGA always 和assign 用法
  7. 天干地支计算公式_日干支公式速算法,根据阴历或阳历推算日干天干地支方法...
  8. 什么是“真AI相机”
  9. 初学风水-某商务中心店铺
  10. 1ms超快响应+144Hz极限刷新 这就是电竞游戏显示器该有的样子