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

解决图片、视频地址加密问题

 

const getImgUrl = async () => {const imgUrl = '远程链接地址'const response = await fetch(imgUrl)//取出blob二进制const blob = await response.blob()//url转为类似blob:http://localhost:9587/cf3265b9-75eb-4722-8e11-5048dec2564d//赋值给需要展示的地方const url = URL.createObjectURL(blob)
}

利用fetch或者xhr都可以,实现思路:

1、远程链接

2、fetch下载图片转二进制流

3、用URL.createObjectURL(blob)创建一个 DOMString

   (与FileReader.readAsDataURL(file)相似文末解释)

切记:需要在页面卸载之前 (例:vue 中 beforeDestroy) 去释放掉所创建的DOMString

释放方法: URL.revokeObjectURL()

主要区别

  1. 通过FileReader.readAsDataURL(file)可以获取一段data:base64的字符串
  2. 通过URL.createObjectURL(blob)可以获取当前文件的一个内存URL

执行时机:

  1. createObjectURL是同步执行(立即的)
  2. FileReader.readAsDataURL是异步执行(过一段时间)

内存使用:

  1. createObjectURL返回一段带hash的url,并且一直存储在内存中,直到document触发了unload事件(例如:document close)或者执行revokeObjectURL来释放。
  2. FileReader.readAsDataURL则返回包含很多字符的base64,并会比blob url消耗更多内存,但是在不用的时候会自动从内存中清除(通过垃圾回收机制)
  3. 兼容性方面两个属性都兼容ie10以上的浏览器。

优劣对比:

  1. 使用createObjectURL可以节省性能并更快速,只不过需要在不使用的情况下手动释放内存
  2. 如果不太在意设备性能问题,并想获取图片的base64,则推荐使用FileReader.readAsDataURL

 

 

http://www.lryc.cn/news/60448.html

相关文章:

  • GPT引领学习之旅:一篇让程序员轻松掌握Elasticsearch的攻略
  • 23种设计模式-仲裁者模式(Android应用场景介绍)
  • 【数据统计】— 极大似然估计 MLE、最大后验估计 MAP、贝叶斯估计
  • Zookeeper学习笔记
  • go语言切片做函数参数传递+append()函数扩容
  • 2023.04.16 学习周报
  • 【面试】如何设计SaaS产品的数据权限?
  • ansible管理变量
  • 一种轻量级日志采集解决方案
  • 【源码】Spring Cloud Gateway 是在哪里匹配路由的?
  • BAT批处理基本命令
  • Python数组仿射变换
  • “==“和equals方法究竟有什么区别?
  • 蓝桥杯15单片机--超声波模块
  • 【学习笔记】ARC159
  • 2023/4/16总结
  • 【剑指offer】常用的数据增强的方法
  • /lib/lsb/init-functions文件解析
  • 【ChatGPT】ChatGPT-5 强到什么地步?
  • [ARM+Linux] 基于全志h616外设开发笔记
  • 如何实现24小时客户服务
  • 查询数据库空间(mysql和oracle)
  • 为什么 SQLite 一定要用 C 语言来开发?
  • TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11
  • 你的GPT跟ChatGPT可能只差了一个DPU
  • springboot服务端接口外网远程调试,并实现HTTP服务监听 - 内网穿透
  • NumPy的应用-1
  • k8s的yaml文件中kind类型详解
  • 第三天:C语言控制结构
  • 访问若依vue版后端api接口