目錄
FileList 物件和 file 物件
Blob 物件
如何建立
下載檔案
FileReader 物件
上傳圖片預覽
數據備份與恢復
Base64 編碼
首頁 web前端 H5教程 H5文件上傳的詳細介紹

H5文件上傳的詳細介紹

Jul 17, 2017 am 11:06 AM
h5 html5

FileList 物件和 file 物件

HTML 中的 input[type="file"] 標籤有一個 multiple 屬性,允許使用者選擇多個文件,FileList物件就是表示使用者選擇的文件清單。這個清單中的每一個文件,就是一個 file 物件。

file 物件的屬性:

  • name : 檔名,不包含路徑。

  • type : 檔案類型。圖片類型的檔案都會以 image/ 開頭,可以由此來限制只允許上傳圖片。

  • size : 檔案大小。可以根據檔案大小來進行其他操作。

  • lastModified : 檔案最後修改的時間。

<input type="file" id="files" multiple><script>var elem = document.getElementById(&#39;files&#39;);elem.onchange = function (event) {var files = event.target.files;for (var i = 0; i < files.length; i++) {// 文件类型为 image 并且文件大小小于 200kbif(files[i].type.indexOf(&#39;image/&#39;) !== -1 && files[i].size < 204800){console.log(files[i].name);}}}</script>
登入後複製

input 中有個 accept 屬性,可以用來規定能夠透過檔案上傳提交的檔案類型。

accept="image/*" 可以用來限制只允許上傳映像格式。但在 Webkit 瀏覽器下卻出現了回應滯慢的問題,要等上好幾秒才彈出檔案選擇框。

解決方法就是將 * 通配符改為指定的 MIME 類型。

<input type="file" accept="image/gif,image/jpeg,image/jpg,image/png">
登入後複製

Blob 物件

Blob 物件相當於一個容器,可以用來存放二進位資料。它有兩個屬性,size 屬性表示位元組長度,type 屬性表示 MIME 類型。

如何建立

Blob 物件可以使用 Blob() 建構子來建立。

var blob = new Blob([&#39;hello&#39;], {type:"text/plain"});
登入後複製

Blob 建構子中的第一個參數是一個數組,可以存放 ArrayBuffer物件、ArrayBufferView 物件、Blob物件和字串。

Blob 物件可以透過 slice() 方法來傳回一個新的 Blob 物件。

var newblob = blob.slice(0,5, {type:"text/plain"});
登入後複製

slice() 方法使用三個參數,皆為可選。第一個參數代表要從Blob物件中的二進位資料的起始位置開始複製,第二個參數代表複製的結束位置,第三個參數為 Blob 物件的 MIME 類型。

canvas.toBlob() 也可以建立 Blob 物件。 toBlob() 使用三個參數,第一個為回呼函數,第二個為圖片類型,預設為 image/png,第三個為圖片質量,值在0到1之間。

var canvas = document.getElementById(&#39;canvas&#39;);canvas.toBlob(function(blob){ console.log(blob); }, "image/jpeg", 0.5);
登入後複製

下載檔案

Blod 物件可以透過 window.URL 物件產生一個網路位址,結合 a 標籤的 download 屬性來實現下載檔案功能。

例如把 canvas 下載為一個圖片檔。

var canvas = document.getElementById(&#39;canvas&#39;);canvas.toBlob(function(blob){
// 使用 createObjectURL 生成地址,格式为 blob:null/fd95b806-db11-4f98-b2ce-5eb16b38ba36var url = URL.createObjectURL(blob);var a = document.createElement(&#39;a&#39;);a.download = &#39;canvas&#39;;a.href = url;
// 模拟a标签点击进行下载a.click();
// 下载后告诉浏览器不再需要保持这个文件的引用了URL.revokeObjectURL(url);});
登入後複製

也可以將字串儲存為文字文件,方法類似。

FileReader 物件

FileReader 物件主要用來把檔案讀入內存,並且讀取檔案中的資料。透過建構函式建立一個 FileReader 物件

var reader = new FileReader();
登入後複製

該物件有以下方法:

  • abort:中斷讀取操作。

  • readAsArrayBuffer:讀取檔案內容到ArrayBuffer物件中。

  • readAsBinaryString:將檔案讀取為二進位資料。

  • readAsDataURL:將檔案讀取為data: URL格式的字串。

  • readAsText:將檔案讀取為文字。

上傳圖片預覽

在常見的應用程式就是在用戶端上傳圖片之後透過 readAsDataURL() 來顯示圖片。

<input type="file" id="files" accept="image/jpeg,image/jpg,image/png"><img src="blank.gif" id="preview"><script>var elem = document.getElementById(&#39;files&#39;),img = document.getElementById(&#39;preview&#39;);elem.onchange = function () {var files = elem.files,reader = new FileReader();if(files && files[0]){reader.onload = function (ev) {img.src = ev.target.result;}reader.readAsDataURL(files[0]);}}</script>
登入後複製

但在某些手機上豎起拍照上傳照片時會有bug,會發現照片倒了,包括三星和iPhone。 。 。解決方案這裡不做講解,有興趣可以查看:移動端圖片上傳旋轉、壓縮的解決方案

數據備份與恢復

FileReader 對象的readAsText() 可以讀取文件的文本,結合Blob 物件下載檔案的功能,那就可以實現將資料匯出檔案備份到本地,當資料要恢復時,透過input 把備份檔案上傳,使用readAsText() 讀取文本,恢復資料。

程式碼跟上面功能類似,這裡不重複,具體的應用可以參考:notepad

Base64 編碼

#在HTML5 中新增了atob 和btoa 方法來支援Base64編碼。它們的命名也很簡單,b to a 和 a to b,即代表編碼和解碼。

var a = "lin-xin.github.io";var b = btoa(a);var c = atob(b);console.log(a);     
// https://lin-xin.github.ioconsole.log(b);     
// aHR0cHM6Ly9saW4teGluLmdpdGh1Yi5pbw==console.log(c);     
// https://lin-xin.github.io
登入後複製

btoa 方法對字串 a 進行編碼,不會改變 a 的值,傳回一個編碼後的值。
atob 方法對編碼後的字串進行解碼。

但是參數中帶中文,已經超出了8位ASCII編碼的字元範圍,瀏覽器就會報錯。所以需要先對中文進行 encodeURIComponent 編碼處理。

var a = "哈喽 世界";var b = btoa(encodeURIComponent(a));var c = decodeURIComponent(atob(b));console.log(b);     
// JUU1JTkzJTg4JUU1JTk2JUJEJTIwJUU0JUI4JTk2JUU3JTk1JThDconsole.log(c);     
// 哈喽 世界
登入後複製

以上是H5文件上傳的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

See all articles