小抄
JavaScript
運用File、FileList和FileReader三個Web API,我們可以透過網頁上的元素獲取使用者選取的檔案。
假設現在有這個很陽春的網頁:
<!DOCTYPE html>
<html>
<body>
<input id = "input" accept = ".xml" type = "file">讀我</input>
<p id = "result"></p>
</body>
</html>
因為使用者選取的檔案會被「儲存」在<input>元素中,所以我們要用FileList API存取這些檔案:
const Input = document.getElementById('input'); // 選取id為input的HTML標籤
const File = Input.files[0]; // 使用者選取的第一個檔案
接著為了讓JavaScript真正「拆開」檔案,我們須借助FileReader API之力:
function readFile(file) {
const fileHandler = new FileReader(); // 建構一個名叫fileHandler的FileReader物件
fileHandler.onload = (e) => { // 當檔案讀取完成時(即Load事件發生時)執行
document.getElementById('result').innerHTML = fileHandler.result;
// 顯示檔案
}
fileHandler.readAsText(file,'utf-8'); // 將檔案以UTF-8編碼開啟
}
readFile(File); // 讀取剛接收的檔案
Drop事件以及它的兄弟姊妹(Drag、DragEnd、DragEnter、DragLeave、DragOver、DragStart)可以由HTML Drag and Drop API和DataTransfer API存取,因此我們把網頁改成這樣:
<!DOCTYPE html>
<html>
<body>
<div id = "input" ondrop = "readDroppedFile(event);">丟進來</div>
<p id = "result"></p>
</body>
</html>
首先,我們需要先阻止瀏覽器嘗試開啟檔案(你現在可以嘗試拖曳PDF文件到瀏覽器中,瀏覽器預設會將其開啟),所以要加上這段程式碼:
function readDroppedFile(e) {
e.preventDefault(); // 防止檔案被瀏覽器開啟
}
接著運用DataTransfer API,將程式改寫成這樣:
function readDroppedFile(e) {
e.preventDefault(); // 防止檔案被瀏覽器開啟
const dt = e.dataTransfer(); // 建構一個名叫dt的dataTransfer物件
const File = dt.files[0]; // 使用者選取的第一個檔案
readfile(File); // 檔案已經可以餵給前面寫的readFile函數了!
}
由<input>元素獲得檔案:
function readFile(file) {
const Input = document.getElementById('input');
const File = Input.files[0];
const fileHandler = new FileReader();
fileHandler.onload = (e) => {
return fileHandler.result;
}
fileHandler.readAsText(file,'utf-8');
}
readFile(File);
由Drop事件獲得檔案:
function readDroppedFile(e) {
e.preventDefault();
const dt = e.dataTransfer();
const File = dt.files[0];
const fileHandler = new FileReader();
fileHandler.onload = (e) => {
return fileHandler.result;
}
fileHandler.readAsText(file,'utf-8');
}
readDroppedFile(event);
介紹 這裡收集了我在前端學習旅程上的筆記與小抄,你可以從左邊的分頁中瀏覽所有主題(我們現在在「介紹」這裡!)。 ⚠ !文章施工中! ⚠ HTML CSS JavaScript 【前端筆記】物件概念
Dec 11, 2022本文中我將嘗試以簡單的方式介紹JavaScript的物件概念,涵蓋物件導向程式設計¹、物件、屬性、類別、實例、建構函數等主題。 物件是什麼? 一言以蔽之,物件(Object)就是「一堆資料的集合體」。但是這完全無法解答你的疑惑,所以我們不妨想像以下例子:當我們求職及求學時,為了快速讓公司或學校的面試官了解我們,我們通常會填寫一張含有各項欄位的履歷表,開頭可能長得像是下圖這樣: 我仍然想不透為什麼沒有被錄取(誤) 如此一來,倘若面試官需要知道你的姓名、學歷、專長、手機號碼與長相,便可以透過這張履歷表來認識我們。事實上,這張履歷表就是一個物件,內含了許多可被存取的屬性(Property)!這或許聽起來很複雜,但是在JavaScript中要建立一個最基本的物件,你只需要短短的一行程式碼: const 履歷表 = {}; // 建立一個叫做「履歷表」的物件。
Dec 11, 2022or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up