使用 JavaScript object URLs,可以處理圖像、音頻和視頻
許多Web應(yīng)用程序需要在前端處理文件輸入,或者將文件上傳到后端。
在這篇文章中,我們來看看如何使用object URL來引用可以使用DOM文件對象引用的數(shù)據(jù)。
使用object URLs
我們可以調(diào)用 URL.createObjectURL 來從文件對象中創(chuàng)建一個URL字符串對象,方法如下。
- const objectURL = window.URL.createObjectURL(fileObj);
然后,我們可以在URL字符串對象上調(diào)用 revokeURL 以從內(nèi)存中釋放URL資源:
- URL.revokeObjectURL(objectURL);
使用object URLs 顯示圖片
例如,我們可以使用 createObjectURL 方法在 img 元素中顯示選定的圖像文件,如下所示。
首先,我們編寫以下HTML:
- <input type="file" accept="image/*">
- <img />
然后,我們可以編寫以下代碼來偵聽文件輸入的change事件,然后使用 createObjectURL 設(shè)置 img 元素的 src 屬性,如下所示:
- const fileInput = document.querySelector('input');
- const img = document.querySelector('img');
- fileInput.onchange = () => {
- const file = fileInput.files[0];
- img.src = URL.createObjectURL(file);
- img.onload = () => {
- URL.revokeObjectURL(img.src);
- }
- }
在上面的代碼中,我們在選定的文件對象 file 上調(diào)用了 createObjectURL 來創(chuàng)建可以設(shè)置為 src 屬性值的URL。然后,在加載圖像時,我們調(diào)用 revokeObjectURL 清除用于創(chuàng)建URL的資源。
使用object URLs 顯示PDF
我們還可以使用object URL來顯示PDF。我們使用相同的 crateObjectURL 方法,但將其設(shè)置為 iframe 的URL而不是img元素。
例如,我們可以編寫以下HTML:
- <input type="file" >
- <iframe>
然后,我們可以將 src 屬性設(shè)置為PDF對象URL的iframe,如下所示:
- const fileInput = document.querySelector('input');
- const iframe = document.querySelector('iframe');
- fileInput.onchange = () => {
- const file = fileInput.files[0];
- const objUrl = URL.createObjectURL(file);
- iframe.setAttribute('src', objUrl);
- URL.revokeObjectURL(objUrl);
- }
我們使用 createObjectURL 和上傳的PDF文件來創(chuàng)建Object URL字符串。然后我們可以為其設(shè)置 src 屬性。然后,PDF將顯示在Firefox的iframe中。
將 object URLs 與其他文件類型一起使用
Object URL也可以與其他文件類型一起使用。例如,我們可以選擇一個視頻文件并通過編寫以下代碼來播放它。首先,我們編寫以下HTML代碼:
- <input type='file' />
- <video controls />
然后,要播放從文件輸入中選擇的視頻文件,我們編寫:
- const fileInput = document.querySelector('input');
- const video = document.querySelector('video');
- fileInput.onchange = async () => {
- const file = fileInput.files[0];
- const objUrl = URL.createObjectURL(file);
- video.src = objUrl;
- await video.play();
- URL.revokeObjectURL(objUrl);
- }
在上面的代碼中,我們有一個異步函數(shù),該函數(shù)從選定的視頻文件創(chuàng)建Object URL。然后,將Object URL設(shè)置為video元素的src屬性。
然后,我們調(diào)用視頻 play 以播放視頻。 play 方法返回一個Promise,因此我們必須添加一個 await 等待該P(yáng)romise的解決。
完成此操作后,我們可以在Object URL上調(diào)用 revokeObjectURL 以釋放資源。
總結(jié)
我們可以創(chuàng)建Object URL并將其設(shè)置為各種元素的src屬性,以顯示或播放它們。在大多數(shù)瀏覽器中,它都可以處理圖像,音頻和視頻。