HTML5之文件API

来源:http://www.cnblogs.com/BillyQin/archive/2016/12/08/6146452.html
-Advertisement-
Play Games

問題很簡單,做個上傳文件的頁面。 html頁面中簡單兩行代碼就完成基本的文件上傳頁面。如下圖。解決。 /***************************分割線********************/ 此時又來了一個新問題:如何獲取用戶上傳的這個文件的文件名、文件大小、文件類型? 效果如下圖。 ...


問題很簡單,做個上傳文件的頁面。

    <!-- multiple代表可上傳多個文件 -->
    <input type="file" id="file" multiple/>
    <input type="button" id="btn" value="上傳" />

html頁面中簡單兩行代碼就完成基本的文件上傳頁面。如下圖。解決。

/***************************分割線********************/

此時又來了一個新問題:如何獲取用戶上傳的這個文件的文件名、文件大小、文件類型?

var btn = document.getElementById("btn"),
    file = document.getElementById("file"),
    fileSize = document.getElementById("fileSize"),
    fileType = document.getElementById("fileType");

btn.onclick = function() {
    fileSize.innerHTML = file.files[0].size;  //files是一個數組,指的是第一個文件。
    fileType.innerHTML = file.files[0].type;  //獲取文件名是file.files[0].type
};

效果如下圖。解決

這個files就是一個文件集合的數組。他包含四個對象,分別是

  • name:該文件的文件名
  • size:文件的位元組大小。註意是位元組。[1kb==1024b(位元組),1b == 8bit(比特),1Mb == 1024kb]
  • type:文件的類型。(text/html、image/png)
  • lastModifiedDate:字元串,文件上一次被修改的時間。(目前只有Chrome支持)

/***************************分割線***************************/

此時又來一個新問題,用戶上傳了一張圖片,並想預覽一下?

這裡引入一個新類型FileReader。類似於XMLHttpRequest。

這個類型下有5個對象,分別是

readAsText(file,encoding):以純文本形式(text)讀取文件,將讀取到的文本保存在 result 屬性中。第二個參數用於指定編碼類型,是可選的。

readAsDataURL(file):讀取文件並將文件以數據 URI 的形式(圖片)保存在 result 屬性中。

readAsBinaryString(file):讀取文件並將一個字元串保存在 result 屬性中,字元串中每個字元表示一位元組。

readAsArrayBuffer(file):讀取文件並將一個包含文件內容的 ArrayBuffer 保存在result 屬性中。

abort(): 中斷讀取文件

還有6個方法,分別是:

onabort 中斷觸發
onerror 錯誤觸發
onprogress 讀取中觸發
onload 成功讀取後觸發
onloadend 無論失敗或成功後觸發

回歸正題。

var btn = document.getElementById("btn"),
    file = document.getElementById("file"),
    fileSize = document.getElementById("fileSize"),
    fileType = document.getElementById("fileType"),
    show = document.getElementById("show");
btn.onclick = function() {
    // fileSize.innerHTML = file.files[0].size;
    // fileType.innerHTML = file.files[0].type;
    var reader = new FileReader();    //先new一個對象。
    reader.readAsDataURL(file.files[0]); //重要的一步,獲取圖片內容,圖片的內容會保存在reader.result中
    reader.onload = function(){
        show.innerHTML = '<img src="'+ reader.result + '" alt="這是圖片"/>';//頁面顯示
    }
};

  

    <!-- multiple代表可上傳多個文件 -->
    <input type="file" id="file" multiple/>
    <input type="button" id="btn" value="上傳" />
    <br/>
    <!-- <span>文件大小:</span><span id="fileSize"></span><br/>
    <span>文件類型:</span><span id="fileType"></span><br/> -->
    <div id="show">
    </div>

 

真好看。

同理,還可以讀取text文本,n進位文件等。。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 參數驗證是一個常見的問題,無論是前端還是後臺,都需對用戶輸入進行驗證,以此來保證系統數據的正確性。對於web來說,有些人可能理所當然的想在前端驗證就行了,但這樣是非常錯誤的做法,前端代碼對於用戶來說是透明的,稍微有點技術的人就可以繞過這個驗證,直接提交數據到後臺。無論是前端網頁提交的介面,還是 ...
  • 上一篇介紹了Rainbow的Create方法, 這裡就來介紹一下Update方法吧, 畢竟新增和修改是雙胞兄弟嘛. 一、Update 1. 測試代碼: 使用方法和Insert方法類似, Update方法由兩個參數, 第一個參數是Id, 第二個參數是dynamic data, 如果你不想更新全部的列, ...
  • 1、IoC/DI簡介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一個中文含義為控制反轉,後一個譯為依賴註入,可以理解成一種編程模式,詳細的說明可參見大牛Martin Fowler的強文 http://martinfowler.com/ ...
  • 面向對象語言的三大特征之一就是多態,聽起來多態比較抽象,簡而言之就是同一行為針對不同對象得到不同的結果,同一對象,在不同的環境下得到不同的狀態。 實例說明: 業務需求:實現一個打開文件的控制台程式的demo,針對不同文件類型使用不同方式打開。 在這個案列中多態的要素 “同一行為”在這個實例中指的就是 ...
  • HTML CSS jQuery 我們先聲明變數,後面的代碼要用到以下變數。 接下來,我們自定義一個函數:getData(),用來獲取當前頁數據。函數中,我們利用$.ajax()向後臺pages.php發送POST非同步請求,將當前頁碼以JSON格式傳遞給後臺。 請求成功後並返回數據,將相應的數據附給變 ...
  • demo:https://zsqosos.github.io/weather/ 截圖: 實現功能:打開網頁時顯示用戶所在城市的天氣狀況,在輸入框輸入城市可查詢其它城市。 實現過程:先調用百度地圖的API來獲取用戶所在的城市,隨後調用聚合數據的天氣API將數據放在頁面上。由於ajax不支持跨域,所以採 ...
  • ng-options="item.action for item in todos" ng-options表達式的基本形式, 形如 "<標簽> for <項目> in <數組> <option value="">(chosse one) </option> ng-options="item.id a ...
  • 如圖,獲取網站中問號後的參數值。 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...