【小月博客】用HTML5的File API做上傳圖片預覽功能

来源:http://www.cnblogs.com/aliyue/archive/2016/06/13/5580326.html
-Advertisement-
Play Games

前段時間做了一個項目,涉及到上傳本地圖片以及預覽的功能,正好之前瞭解過 html5(點擊查看更多關於web前端的有關資源) 可以上傳本地圖片,然後再網上看了一些demo結合自己的需求,終於搞定了。(PS : 不得不承認我這個人有多懶,沒有需求的時候我向來不主動去學習)。移動端完全支持哦!已測試。 下 ...


前段時間做了一個項目,涉及到上傳本地圖片以及預覽的功能,正好之前瞭解過 html5(點擊查看更多關於web前端的有關資源) 可以上傳本地圖片,然後再網上看了一些demo結合自己的需求,終於搞定了。(PS : 不得不承認我這個人有多懶,沒有需求的時候我向來不主動去學習)。移動端完全支持哦!已測試。

下麵給大家看看代碼吧怎麼實現的

第一:HTLM部分(這裡不去做漂亮的樣式了我們註重學習功能)

<input type="file" id="fileElem" multiple accept="image/*"  onchange="handleFiles(this)">
<div id="fileList" style="width:200px;height:200px;"></div>

註:如果想寫成很漂亮的那種上傳按鈕,告訴大家我的寫法就是模擬上傳,即在input下麵決定定位一張圖片(上傳按鈕),input的寬高和圖片色值一樣大小,透明度為0 ,最後別忘記涉及z-index的順序。

第二:JS利用H5新功能處理上傳

Js實現圖片上傳前的預覽功能,主要是使用html5 的 Files API 實現,ie可相容部分功能,在火狐和chrome下正常運行。HTML5的 file input標簽支持multiple 和 accept ,前一個屬性可控制多文件選擇,後一個控制上傳的文件類型。預瞭解更多關於File API的資料,有自己查下。

如有不明白請查看註解,或者給我留言都可以的。

註解:

    這裡我們就說一下思路吧(我自己的理解):

 

  1. 首先 img.src = window.URL.createObjectURL(files[0]) 是我們創建的本地路徑,為了本地預覽而設置的。
  2. 第二我們就涉及到了H5上傳那麼我們第一步就是讀出來這個圖片的信息 reader.onload 這個方法就是讀取img的信息數據
  3. 當讀取成功就可以調用上傳的後臺介面,來處理文件上傳到什麼位置了。
<script>
    window.URL = window.URL || window.webkitURL;
    var fileElem = document.getElementById("fileElem"),
    fileList = document.getElementById("fileList");
    function handleFiles(obj) {
        var files = obj.files,
        img = new Image();
        if(window.URL){
            //File API
            alert(files[0].name + "," + files[0].size + " bytes");
            img.src = window.URL.createObjectURL(files[0]); //創建一個object URL,並不是你的本地路徑
            img.width = 200;
            img.onload = function(e) {
                window.URL.revokeObjectURL(this.src); //圖片載入後,釋放object URL
            }
            fileList.appendChild(img);
        }else if(window.FileReader){
            //opera不支持createObjectURL/revokeObjectURL方法。我們用FileReader對象來處理
            var reader = new FileReader();
            reader.readAsDataURL(files[0]);
            reader.onload = function(e){
                alert(files[0].name + "," +e.total + " bytes");
                img.src = this.result;
                img.width = 200;
                fileList.appendChild(img);
            }
        }else{
            //ie
            obj.select();
            obj.blur();
            var nfile = document.selection.createRange().text;
            document.selection.empty();
            img.src = nfile;
            img.width = 200;
            img.onload=function(){
                alert(nfile+","+img.fileSize + " bytes");
            }
            fileList.appendChild(img);
        }
    }
</script>

PS: :大家在用的時候有什麼問題及時給我反饋,我寫的肯定不是做好的,其實我想學習一下可以多張上傳的功能。但是現階段只能分享到這裡了。

 


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

-Advertisement-
Play Games
更多相關文章
  • 分別利用javascript的源碼和jQuery來實現一個簡單的選項卡,對比各自的步驟。 ...
  • 1、扁平化的設計風格。--淘寶 直接使用input。對其設置height。padding。使滑鼠居中又不會占滿輸入框。 2、背景是圖片的設計。--百度 試用span將input包裹起來。span設置背景。input設置margin。使用-webkit-appearance:none去除系統的預設樣式 ...
  • 1.filter()和not()方法 filter()和not()是一對反方法,filter()是過濾. filter()方法是針對元素自身。(跟has()方法有區別) 2.has()方法 has()方法表示的是包含的意思,它跟filter()方法是有區別的。has()方法有父子級關係。 3.nex ...
  • HTML5能為我們做的事兒很多,最為可口的就是語義化標簽的應用,如果你已經在Chrome或者其他支持HTML5的瀏覽器上用過它的牛x,那這篇文章對你一定有用,因為現在你也可以在IE上用到HTML5。 好吧!大前端今天的主題是:HTML5 Shiv 下麵是引用Google的html5.js文件,好處就 ...
  • HTML部分省略了,很簡單。 下麵是JavaScript ...
  • 手機涉及到填寫表單時,需要手機彈出自定義的輸入框,而非手機自帶的輸入鍵盤,如大寫數字等。 實現思路(考慮多種文本輸入形式): 首先,文本框獲取焦點時禁止手機彈出自帶的輸入鍵盤。 其次,顯示與關閉自定義的輸入鍵盤。 最後,點擊自定義的輸入鍵盤,做判斷使對應的input獲取值。 ...
  • ES5引入Object.getPrototypeOf函數作為獲取對象原型的標準API,但由於之前的很多js引擎使用了一個特殊的__proto__屬性來達到相同的目的。但有些瀏覽器並不支持這個__proto__屬性,所以並不是完全相容的。例如對於擁有null原型的對象,不同的環境結果就不同了。 ...
  • 眾所周知在前段的工作中註冊信息或獲取當前手機號信息等需求,我們基本上都要涉及到手機號驗證碼,在網路上搜索的案例雜亂無章,用的時候全是坑,真心不想用了,然後自己寫了一個獲取手機驗證碼的倒計時效果。有需求的伙伴們可以看看怎麼實現的。 如何獲取手機驗證碼? 小月不知道大家是利用什麼平臺去獲取驗證碼的,但是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...