JS中URL.createObjectURL使用示例講解
前言
URL.createObjectURL() 靜態(tài)方法會創(chuàng)建一個 DOMString,其中包含一個表示參數(shù)中給出的對象的URL。這個 URL 的生命周期和創(chuàng)建它的窗口中的 document 綁定。這個新的URL 對象表示指定的 File 對象或 Blob 對象。
URL.createObjectURL()
語法
objectURL = URL.createObjectURL(object);
參數(shù)
用于創(chuàng)建 URL 的 File 對象、Blob 對象或者 MediaSource 對象。?
返回值
一個DOMString包含了一個對象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控制臺打印的blob文件資源地址粘貼到瀏覽器中
blob:http://localhost:8080/1ece2bb1-b426-4261-89e8-c3bec43a4020
URL.revokeObjectURL()
在每次調(diào)用 createObjectURL()
方法時,都會創(chuàng)建一個新的 URL 對象,即使你已經(jīng)用相同的對象作為參數(shù)創(chuàng)建過。當(dāng)不再需要這些 URL 對象時,每個對象必須通過調(diào)用 URL.revokeObjectURL()
方法來釋放。
瀏覽器在 document 卸載的時候,會自動釋放它們,但是為了獲得最佳性能和內(nèi)存使用狀況,你應(yīng)該在安全的時機(jī)主動釋放掉它們。
語法
window.URL.revokeObjectURL(objectURL);
參數(shù) objectURL
一個 DOMString,表示通過調(diào)用 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)區(qū)別
若對FileReader不了解,則可以翻看這篇文章
主要區(qū)別
- 通過
FileReader.readAsDataURL(file)
可以獲取一段data:base64
的字符串 - 通過
URL.createObjectURL(blob)
可以獲取當(dāng)前文件的一個內(nèi)存URL
執(zhí)行時機(jī)
createObjectURL
是同步執(zhí)行(立即的)FileReader.readAsDataURL
是異步執(zhí)行(過一段時間)
內(nèi)存使用
createObjectURL
返回一段帶hash的url,并且一直存儲在內(nèi)存中,直到document觸發(fā)了unload
事件(例如:document close)或者執(zhí)行revokeObjectURL
來釋放。FileReader.readAsDataURL
則返回包含很多字符的base64,并會比blob url消耗更多內(nèi)存,但是在不用的時候會自動從內(nèi)存中清除(通過垃圾回收機(jī)制)
優(yōu)劣對比
- 使用
createObjectURL
可以節(jié)省性能并更快速,只不過需要在不使用的情況下手動釋放內(nèi)存 - 如果不太在意設(shè)備性能問題,并想獲取圖片的base64,則推薦使用
FileReader.readAsDataURL
總結(jié)
到此這篇關(guān)于JS中URL.createObjectURL使用的文章就介紹到這了,更多相關(guān)JS URL.createObjectURL講解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript文本框內(nèi)輸入文字倒計數(shù)的方法
這篇文章主要介紹了javascript文本框內(nèi)輸入文字倒計數(shù)的方法,涉及javascript針對鍵盤事件的操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-02-02javascript:history.go()和History.back()的區(qū)別及應(yīng)用
為提高用戶體驗度,可能會使用到刷新 前進(jìn) 后退等相關(guān)更能,本文將以此問題詳細(xì)介紹javascript:history.go()和History.back()的區(qū)別及應(yīng)用,需要的朋友可以參考下2012-11-11網(wǎng)頁禁用右鍵菜單和鼠標(biāo)拖動選擇方法小結(jié)
本文主要給大家總結(jié)了一下在網(wǎng)頁中禁用鼠標(biāo)右鍵和鼠標(biāo)拖動選擇的幾種常用的方法,十分的實用,有需要的小伙伴參考下。2015-02-02ionic App問題總結(jié)系列之ionic點(diǎn)擊系統(tǒng)返回鍵退出App
本篇文章主要介紹了ionic App問題總結(jié)系列之ionic點(diǎn)擊系統(tǒng)返回鍵退出App,具有一定的參考價值,有興趣的可以了解一下2017-08-08CSS或者JS實現(xiàn)鼠標(biāo)懸停顯示另一元素
這篇文章主要介紹了CSS或者JS實現(xiàn)鼠標(biāo)懸停顯示另一元素的相關(guān)資料,需要的朋友可以參考下2016-01-01JavaScript校驗Number(4,1)格式的數(shù)字實例代碼
這篇文章主要介紹了JavaScript校驗Number(4,1)格式的數(shù)字實例代碼,本文實現(xiàn)思路明確代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03