玩轉HTML5應用實戰:靈活拖拉檔案

餘二五發表於2017-11-09

在HTML5中,出現了眾多的新的技術和特性,而本文將介紹的是目前HTML5標準中,對如何將使用者客戶端的檔案拖拉到瀏覽器這一特性進行初步的講解。在HTML5中的標準中,提到了希望能在新一代瀏覽器中,支援使用者直接將客戶端桌面的檔案拖放到瀏覽器中,甚至鼓勵做更多的工作(比如上傳檔案)。這篇文章將分如下幾個方面進行初步的分析和探討:

  如何將檔案拖放到web頁面中

在Javascript中分析拖拽檔案

在客戶端裝載和解析檔案

使用 XMLHttpRequest2非同步上傳檔案到服務端

上傳時顯示一個進度條

改進上傳檔案的表單,甚至支援IE 6,以讓在各瀏覽器中可以相容執行。

並介紹如何單單隻用Javascript實現,不用任何框架。

目前瀏覽器對檔案拖拉的支援

  在我們開始講解前,我們先要說明下,由於HTML5的標準最終版本還沒完全釋出,各瀏覽器也不是完全都對所有功能進行支援,所以本文的程式有可能在今後的各瀏覽器中不能完全執行成功,但至少在本文發表時,會對以下瀏覽器在如下各方面進行支援。

  1) 目前程式能在所有的Firefox和Chrome的瀏覽器中很好的執行。

  2) Opera瀏覽器能解通過Javascript去解析檔案,但不支援檔案的拖拉到瀏覽器中及使用XMLHttpRequest2去上傳檔案。

  3) IE和Safari不支援任何本文提到的API和新特性。

  4) Apple不允許在iOS系統中使用HTML表單上傳檔案。

  下面,就讓我們開始學習之旅吧。

  HTML和CSS

  我們先來看下上傳檔案的表單,程式碼如下:



<form id=”upload” action=”upload.php” method=”POST” enctype=”multipart/form-data”>

<fieldset>

<legend>HTML File Upload</legend>

<input type=”hidden” id=”MAX_FILE_SIZE” name=”MAX_FILE_SIZE” value=”300000″ />

<div>

    <label for=”fileselect”>Files to upload:</label>

    <input type=”file” id=”fileselect” name=”fileselect[]” multiple=”multiple” />

    <div id=”filedrag”>or drop files here</div>

</div>

<div id=”submitbutton”>

    <button type=”submit”>Upload Files</button>

</div>

</fieldset>

</form>

<div id=”messages”>

<p>Status Messages</p>

</div>

  可以看到,在這個表單中,放置了一個檔案選擇框,唯一跟HTML4不同的時,這個框採

  用的是HTML5中的一個新增的檔案上傳框屬性multiple,允許選擇多個不同的檔案。此外,

  在id為 filedrag的div中,這個區域是用來將檔案拖拉放置的區域,下文中會用到。

  接下來會看下CSS,程式碼如下:

#filedrag

  {

  display: none;

  font-weight: bold;

  text-align: center;

  padding: 1em 0;

  margin: 1em 0;

  color: #555;

  border: 2px dashed #555;

  border-radius: 7px;

  cursor: default;

  }

  #filedrag.hover

  {

  color: #f00;

  border-color: #f00;

  border-style: solid;

  box-shadow: inset 0 3px 4px #888;

  }



 

  在這段CSS中,設定了當檔案拖放到頁面的指定區域時的樣式,這個樣式是當檔案被拖動

  到指定區域時,才起到作用的,是通過Javascript擊發其起作用的,下文會提到。

  HTML5中的檔案API

  在HTML5中,對檔案的API有如下幾點的新的改進,其標準可以參考

  (http://www.w3.org/TR/file-upload/)。

  FileList: 表示已選擇的檔案,以陣列的形式表示。

File: 代表一個單獨的檔案

FileReader: FileReader是一個介面,它允許我們在客戶端讀取檔案的資料,並且可以在Javascript中去使用。

開始動手寫Javascript

  下面,我們開始動手編寫Javascript,首先我們編寫一些工具javascript,比如:

// getElementById

  function $id(id) {

  return document.getElementById(id);

  }

  //

  // 輸出資訊

  function Output(msg) {

  var m = $id(“messages”);

  m.innerHTML = msg + m.innerHTML;

  }



接者,我們編寫init方法,去判斷檔案API的可用性,程式碼如下:

 // 判斷當前瀏覽器中檔案API是否可用

  if (window.File && window.FileList && window.FileReader) {

  Init();

  }

  //

  // 初始化程式

  function Init() {

  var fileselect = $id(“fileselect”),

  filedrag = $id(“filedrag”),

  submitbutton = $id(“submitbutton”);

  // 新增檔案選擇的事件監聽

  fileselect.addEventListener(“change”, FileSelectHandler, false);

  // 判斷xmlhttprequest 2是否可用

  var xhr = new XMLHttpRequest();

  if (xhr.upload) {

  // file drop

  filedrag.addEventListener(“dragover”, FileDragHover, false);

  filedrag.addEventListener(“dragleave”, FileDragHover, false);

  filedrag.addEventListener(“drop”, FileSelectHandler, false);

  filedrag.style.display = “block”;

  // remove submit button

  submitbutton.style.display = “none”;

  }

  }

本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/wws5201985/736992,如需轉載請自行聯絡原作者


相關文章