JS中URL.createObjectURL使用示例講解
前言
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講解內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!