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!

推薦閱讀: