我們可以將input
型別指定為file
,以在web應用程式中使用檔案上傳功能。
input filte
提供按鈕上傳乙個或多個檔案。 預設情況下,它使用作業系統的本機檔案瀏覽器上傳單個檔案。成功上傳後,file api
使得可以使用簡單的 js **讀取file
物件。 要讀取file
物件,我們需要監聽change
事件。
首先,通過id
獲取檔案上傳的例項:
const fileuploader = document.getelementbyid('file-uploader');
然後新增乙個change
事件偵聽器,以在上傳完成後讀取檔案物件, 我們從event.target.files
屬性獲取上傳的檔案資訊:
fileuploader.addeventlistener('change', (event) => );
在控制台中觀察輸出結果,這裡關注一下filelist
陣列和file
物件,該物件具有有關上傳檔案的所有元資料資訊。
如果我們想上傳多個檔案,需要在標籤上新增multiple
屬性:
現在,我們可以上傳多個檔案了,以前面事例為基礎,選擇多個檔案上傳後,觀察一下控制台的變化:
每當我們上傳檔案時,file
物件都有元資料資訊,例如file name
,size
,last update time,type 等等。這些資訊對於進一步的驗證和特殊處理很有用。
const fileuploader = document.getelementbyid('file-uploader');
// 聽更 change 件並讀取元資料
fileuploader.addeventlistener('change', (event) => );
}});
下面是單個檔案上傳的輸出結果:
我們可以使用accept
屬性來限制要上載的檔案的型別,如果只想上傳的檔案格式是.jpg
,.png
時,可以這麼做:
在上面的**中,只能選擇字尾是.jpg
和.png
的檔案。
成功上傳檔案後顯示檔案內容,站在使用者的角度上,如果上傳之後,沒有乙個預覽的,就很奇怪也不體貼。
我們可以使用filereader
物件將檔案轉換為二進位制字串。 然後新增load
事件偵聽器,以在成功上傳檔案時獲取二進位制字串。
// filereader 例項
const reader = new filereader();
fileuploader.addeventlistener('change', (event) => );
});
如果使用者上傳過大,為了不讓伺服器有壓力,我們需要限制的大小,下面是允許使用者上傳小於1m
的,如果大於1m
將上傳失敗。
fileuploader.addeventlistener('change', (event) => `;
} else file has been uploaded successfully. `;
} feedback.innerhtml = msg;
});
更好的使用者體驗是讓使用者知道檔案上傳進度,前面我們用過了filereader
以及讀取和載入檔案的事件。
const reader = new filereader();
filereader
還有乙個progress
事件,表示當前上傳進度,配合html5的progress
標籤,我們來模擬一下檔案的上傳進度。
我們可以上傳整個目錄嗎?嗯,這是可能的,但有一些限制。有乙個叫做webkitdirectory
的非標準屬性(目前只有谷歌瀏覽器還有microsoft edge支援按照資料夾進行上傳),它允許我們上傳整個目錄。
使用者必須需要確認才能上傳目錄
使用者單擊「上傳」按鈕後,就會進行上傳。 這裡要注意的重要一點。filelist
陣列將以平面結構的形式包含有關上載目錄中所有檔案的資訊。 對於每個file
物件,webkitrelativepath
屬性表示目錄路徑。
例如,上傳乙個主目錄及其下的其他資料夾和檔案:
現在,file 物件將將webkitrelativepath
填充為:
不支援檔案上傳的拖拽就有點 low 了,不是嗎?我們來看看如何通過幾個簡單的步驟實現這一點。
首先,建立乙個拖放區域和乙個可選的區域來顯示上傳的檔案內容。
drop here
通過它們各自的id獲取dropzone
和content
區域。
const dropzone = document.getelementbyid('drop-zone');
const content = document.getelementbyid('content');
新增乙個dragover
事件處理程式,以顯示將要複製的內容的效果:
接下來,我們需要乙個drop
事件***來處理。
dropzone.addeventlistener('drop', event => );
有乙個特殊的方法叫做url.createobjecturl()
,用於從檔案中建立唯一的url。還可以使用url.revokeobjecturl()
方法來釋放它。
url.revokeobjecturl()
靜態方法用來釋放乙個之前已經存在的、通過呼叫url.createobjecturl()
建立的 url 物件。當你結束使用某個 url 物件之後,應該通過呼叫這個方法來讓瀏覽器知道不用在記憶體中繼續保留對這個檔案的引用了。
fileuploader.addeventlistener('change', (event) => );
5個對前端開發人員有用的瀏覽器擴充套件
瀏覽器擴充套件程式,用於建立全面的調色盤。設計人員和前端開發人員的必備工具。調色盤將提取 上使用的所有顏色並建立乙個調色盤。您可以共享調色盤並將其匯出到sketch,adobe swatch等。鏈結到擴充套件 識別任何 上使用的字型,將它們新增書籤,試用並購買。這是乙個很棒的工具,可以檢測網頁上使用...
無 文化 的Web開發人員才會相信的10個教訓
1.firefox 和 chrome佔據了91 的市場份額 印尼人可能會使用firefox和chrome。這是直接從statcounter來的統計資料,但全球範圍內chrome只比ie高了幾個點而已,因此還是根據你的客戶來設計吧。2.8 7 7月8號 總會先於7 8 8月7號 這是我們的共識,大部分...
web開發人員職業發展的11個階段
今天我們帶來的是一篇有趣的關於web開發人員職業發展11個不同階段的文章。web開發人員是個有著許多階段,非常有趣並且擁有挑戰的乙個職業。考慮到這陡峭的學習曲線,你可以完全預期到你將經歷挫折,啟蒙,自以為是以及在這些心態之間的轉變。在這篇文章中,我們通過一系列超犀利的動畫視角來看看這些階段,相信這將...