JS中URL.createObjectURL使用示例講解
前言
URL.createObjectURL() 靜態(tài)方法會(huì)創(chuàng)建一個(gè) DOMString,其中包含一個(gè)表示參數(shù)中給出的對(duì)象的URL。這個(gè) URL 的生命周期和創(chuàng)建它的窗口中的 document 綁定。這個(gè)新的URL 對(duì)象表示指定的 File 對(duì)象或 Blob 對(duì)象。
URL.createObjectURL()
語法
objectURL = URL.createObjectURL(object);
參數(shù)
用于創(chuàng)建 URL 的 File 對(duì)象、Blob 對(duì)象或者 MediaSource 對(duì)象。?
返回值
一個(gè)DOMString包含了一個(gè)對(duì)象URL,該URL可用于指定源 object的內(nèi)容。
示例
// 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控制臺(tái)打印的blob文件資源地址粘貼到瀏覽器中
blob:http://localhost:8080/1ece2bb1-b426-4261-89e8-c3bec43a4020
URL.revokeObjectURL()
在每次調(diào)用 createObjectURL()
方法時(shí),都會(huì)創(chuàng)建一個(gè)新的 URL 對(duì)象,即使你已經(jīng)用相同的對(duì)象作為參數(shù)創(chuàng)建過。當(dāng)不再需要這些 URL 對(duì)象時(shí),每個(gè)對(duì)象必須通過調(diào)用 URL.revokeObjectURL()
方法來釋放。
瀏覽器在 document 卸載的時(shí)候,會(huì)自動(dòng)釋放它們,但是為了獲得最佳性能和內(nèi)存使用狀況,你應(yīng)該在安全的時(shí)機(jī)主動(dòng)釋放掉它們。
語法
window.URL.revokeObjectURL(objectURL);
參數(shù) objectURL
一個(gè) DOMString,表示通過調(diào)用 URL.createObjectURL() 方法返回的 URL 對(duì)象。
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)區(qū)別
若對(duì)FileReader不了解,則可以翻看這篇文章
主要區(qū)別
- 通過
FileReader.readAsDataURL(file)
可以獲取一段data:base64
的字符串 - 通過
URL.createObjectURL(blob)
可以獲取當(dāng)前文件的一個(gè)內(nèi)存URL
執(zhí)行時(shí)機(jī)
createObjectURL
是同步執(zhí)行(立即的)FileReader.readAsDataURL
是異步執(zhí)行(過一段時(shí)間)
內(nèi)存使用
createObjectURL
返回一段帶hash的url,并且一直存儲(chǔ)在內(nèi)存中,直到document觸發(fā)了unload
事件(例如:document close)或者執(zhí)行revokeObjectURL
來釋放。FileReader.readAsDataURL
則返回包含很多字符的base64,并會(huì)比blob url消耗更多內(nèi)存,但是在不用的時(shí)候會(huì)自動(dòng)從內(nèi)存中清除(通過垃圾回收機(jī)制)
優(yōu)劣對(duì)比
- 使用
createObjectURL
可以節(jié)省性能并更快速,只不過需要在不使用的情況下手動(dòng)釋放內(nèi)存 - 如果不太在意設(shè)備性能問題,并想獲取圖片的base64,則推薦使用
FileReader.readAsDataURL
總結(jié)
到此這篇關(guān)于JS中URL.createObjectURL使用的文章就介紹到這了,更多相關(guān)JS URL.createObjectURL講解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ExtJs中g(shù)ridpanel分組后組名排序?qū)嵗a
這篇文章主要介紹了ExtJs中g(shù)ridpanel分組后組名排序?qū)嵗a,有需要的朋友可以參考一下2013-12-12JS實(shí)現(xiàn)網(wǎng)頁上隨機(jī)產(chǎn)生超鏈接地址的方法
這篇文章主要介紹了JS實(shí)現(xiàn)網(wǎng)頁上隨機(jī)產(chǎn)生超鏈接地址的方法,涉及JavaScript隨機(jī)數(shù)的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11JS實(shí)現(xiàn)兼容性較好的隨屏滾動(dòng)效果
這篇文章主要介紹了JS實(shí)現(xiàn)兼容性較好的隨屏滾動(dòng)效果,演示了固定位置顯示和隨屏滾動(dòng)兩種效果的實(shí)現(xiàn)方法,涉及css樣式的設(shè)置與結(jié)合時(shí)間函數(shù)遞歸調(diào)用實(shí)現(xiàn)滾屏的技巧,需要的朋友可以參考下2015-11-11js createRange與createTextRange的一些用法實(shí)例
關(guān)于createTextRange和createRange的一些用法,腳本之家增強(qiáng)版。2010-05-05javascript命名約定(變量?函數(shù)?類?組件)
這篇小文章主要是通過一些例子來介紹一些Javascript中一些關(guān)于命名變量,函數(shù),類或者是組件的通用約定,雖然這些規(guī)則并不是強(qiáng)制性的,但是呢,他們卻被一些JS社區(qū)所廣泛采用,所以,了解他們還是很有必要的2023-03-03淺談JavaScript 函數(shù)參數(shù)傳遞到底是值傳遞還是引用傳遞
下面小編就為大家?guī)硪黄獪\談JavaScript 函數(shù)參數(shù)傳遞到底是值傳遞還是引用傳遞。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08防止Layui form表單重復(fù)提交的實(shí)現(xiàn)方法
今天小編就為大家分享一篇防止Layui form表單重復(fù)提交的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09