JS中URL.createObjectURL使用示例讲解

目录
  • 前言
  • URL.createObjectURL()
    • 语法
    • 参数
    • 返回值
    • 示例
  • URL.revokeObjectURL()
    • 语法
    • 参数objectURL
    • Returnvalue
    • 示例
  • 与FileReader.readAsDataURL(file)区别
    • 主要区别
    • 执行时机
    • 内存使用
    • 优劣对比
  • 总结

前言

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

URL.createObjectURL()

语法

objectURL = URL.createObjectURL(object);

参数

用于创建 URL 的 File 对象、Blob 对象或者 MediaSource 对象。​

返回值

一个DOMString包含了一个对象URL,该URL可用于指定源 object的内容。

示例

// html代码
<input type="file" id="file">

// js代码
document.querySelector('#file').onchange = function (e) {
  console.log(e.target.files[0])
  console.log(URL.createObjectURL(e.target.files[0]))
}

将上方console控制台打印的blob文件资源地址粘贴到浏览器中

blob:http://localhost:8080/1ece2bb1-b426-4261-89e8-c3bec43a4020

URL.revokeObjectURL()

在每次调用 createObjectURL() 方法时,都会创建一个新的 URL 对象,即使你已经用相同的对象作为参数创建过。当不再需要这些 URL 对象时,每个对象必须通过调用 URL.revokeObjectURL() 方法来释放。

浏览器在 document 卸载的时候,会自动释放它们,但是为了获得最佳性能和内存使用状况,你应该在安全的时机主动释放掉它们。

语法

window.URL.revokeObjectURL(objectURL);

参数 objectURL

一个 DOMString,表示通过调用 URL.createObjectURL() 方法返回的 URL 对象。

Return value

undefined

示例

// html代码
<input type="file" id="file">
<img id="img1" style="width: 200px;height: auto" />
<img id="img2" style="width: 200px;height: auto" />

// js代码
document.querySelector('#file').onchange = function (e) {
	const file = e.target.files[0]

	const URL1 = URL.createObjectURL(file)
	console.log(URL1)
	document.querySelector('#img1').src = URL1
	URL.revokeObjectURL(URL1)

	const URL2 = URL.createObjectURL(file)
	console.log(URL2)
	document.querySelector('#img2').src = URL2
}

与FileReader.readAsDataURL(file)区别

若对FileReader不了解,则可以翻看这篇文章

主要区别

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

执行时机

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

内存使用

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

优劣对比

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

总结

到此这篇关于JS中URL.createObjectURL使用的文章就介绍到这了,更多相关JS URL.createObjectURL讲解内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 浅谈js图片前端预览之filereader和window.URL.createObjectURL

    浅谈js图片前端预览之filereader和window.URL.createObjectURL //preview img : filereader方式 document.getElementById('imgFile').onchange = function(e){ 5 var ele = document.getElementById('imgFile').files[0]; var fr = new FileReader(); fr.onload = function(ele){ va

  • JS中URL.createObjectURL使用示例讲解

    目录 前言 URL.createObjectURL() 语法 参数 返回值 示例 URL.revokeObjectURL() 语法 参数objectURL Returnvalue 示例 与FileReader.readAsDataURL(file)区别 主要区别 执行时机 内存使用 优劣对比 总结 前言 URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL.这个 URL 的生命周期和创建它的窗口中的 document 绑定.

  • 原生js封装运动框架的示例讲解

    昨天我们说了一下原生JS中常用的兼容性写法,今天我们来说一下运动框架. 正常情况下我们要写一个运动的效果会用到tween.js这么一个插件,这个东西不是一般人写出来的,因为里面涉及的运动效果都是经过一堆数学的函数运算出来的,我们平常人是写不出来的,所有我们就自己封装一个运动框架,有什么问题改起来也方便,下面我们就开始封装. 首先,我们先写一个div,设置一些简单的样式,我们就拿这个div举例子 如下代码: #div{ width: 100px; height: 100px; background

  • js中url对象化管理分析

    1.问题描述 url是web编写过程中一种不可或缺的需要打交道的值,不论是在页面跳转中,还是ajax请求数据或是其他框架插件的url提供. 对于很多程序猿来说,js中经常遇到需要变更url(主要是其中所包含的参数)的情况,大多数人使用的方法是直接拼接. 这种方法胜在简单,同样存在不少不足,如: 拼接形成的url安全性上总是存在潜在的危险; 从某个完整url中获取其中所包含的参数和纯地址,以进行下一步的比较,也是件较麻烦的事情; 2.解决思路 基于以上问题,我的解决策略是将url进行对象化的管理,

  • js中变量的连续赋值(实例讲解)

    今天遇到了一个连续赋值的经典案例,网友们给出的答案也是五花八门,看起来有些繁琐,我也来说说自己的看法. 下面就是这个经典案例: var a = {n: 1}: var b = a; a.x = a = {n: 2}: console.log(a); console.log(b); console.log(a.x); console.log(b.x): 我们先来看一下普通连续赋值,即:变量赋值的类型是数据类型值 var a=3; var b=a=5; console.log(a); console

  • js中yield参数应用示例深入理解

    目录 yield是什么 yield应用的简单例子 demo1 错误的调用 demo2 一些说明 next()函数及参数 yield参数的对比 更深层次的理解yield 分析 A组 B组 目前项目中的可用性 yield是什么 yield是ES6的新关键字,使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者.它可以被认为是一个基于生成器的版本的return关键字. yield关键字实际返回一个IteratorResult(迭代器)对象,它有两个属性,value和done,分别

  • Vue.js展示AJAX数据简单示例讲解

    最近琢磨了一下vue.js,并在项目中进行了运用,感觉非常好用,强烈推荐. 当通过AJAX方式取回数据后,使用vue.js可以完美地按一定逻辑在页面上的展示数据,代码简单.优美.自然,而且便于与在用的页面框架集成. 感谢vue.js的作者,官方网站地址:https://cn.vuejs.org 举个小例子.注意,代码中使用jQuery.bootstrap.没有用过bootstrap不影响阅读本文. 一.返回的JSON数据示例 [ {"playid":"12113c676a4e

  • 在JS中解析HTML字符串示例代码

    在js中直接添加html语句,js会将html字符串解析成相应的HTML语句,并在前端进行显示. 复制代码 代码如下: <span style="font-size:14px;">var el = document.createElement( 'div' ); el.innerHTML = "<html><head><title>titleTest</title></head><body>&

  • js获取当前页面路径示例讲解

    设置或获取对象指定的"文件名"或路径.<script>alert(window.location.pathname)</script> 设置或获取整个 URL 为字符串.<script>alert(window.location.href); </script> 设置或获取与 URL 关联的端口号码.<script>alert(window.location.port)</script> 设置或获取 URL 的协议

  • JS中字符串trim()使用示例

    示例一: <head> <title>测试JS扩展方法</title> <script type="text/javascript"> // 合并多个空白为一个空白 String.prototype.ResetBlank = function() { //对字符串扩展 var regEx = /\s+/g; return this.replace(regEx, ' '); }; window.onload = function() { v

  • Node.js中调用mysql存储过程示例

    例子仅在windows下测试通过,没有放在linux下测试.如有问题,可以电邮给我~ 1.安装node.js.mysql,此处略(自行搜索吧)-: 2.创建一个名为test的数据库,然后建一张名为user_info的表(仅供测试)- 这里假定mysql使用的用户名为root,密码为123456 相应的mysql如下: 复制代码 代码如下: /** * 创建名为test的数据库 */ DROP DATABASE IF EXISTS test; CREATE DATABASE test; USE t

随机推荐