[轉]HTML5 本地圖片預覽

来源:http://www.cnblogs.com/DKnight/archive/2016/02/17/5194591.html
-Advertisement-
Play Games

[原文鏈接] https://www.huangwenchao.com.cn/2015/03/html5-image-preview.html 問題 加入我們在 HTML 裡面有一個圖片上傳控制項: <input id="upload_image" type="file" name="image" a


[原文鏈接] https://www.huangwenchao.com.cn/2015/03/html5-image-preview.html

 

問題

加入我們在 HTML 裡面有一個圖片上傳控制項:

<input id="upload_image" type="file" name="image" accept="image/*" />

註意這個 accept="image/*" 非常重要,它指定了上傳的是圖片,在移動端的時候會關聯到系統的彈窗選擇類型等問題,務必加上。

然後,問題是,我們在沒有提交這個表單到伺服器之前,有沒有辦法把圖片的內容讀取出來呢?

看似簡單,都是客戶端的文件,應該是可以的,但在之前確實沒什麼好辦法,但是自從我們有了 HTML5

例子說明問題

$(function() {
  $('#upload_image').change(function(event) {
    // 根據這個 <input> 獲取文件的 HTML5 js 對象
    var files = event.target.files, file;        
    if (files && files.length > 0) {
      // 獲取目前上傳的文件
      file = files[0];
      // 來在控制台看看到底這個對象是什麼
      console.log(file);
      // 那麼我們可以做一下諸如文件大小校驗的動作
      if(file.size > 1024 * 1024 * 2) {
        alert('圖片大小不能超過 2MB!');
        return false;
      }
      // !!!!!!
      // 下麵是關鍵的關鍵,通過這個 file 對象生成一個可用的圖像 URL
      // 獲取 window 的 URL 工具
      var URL = window.URL || window.webkitURL;
      // 通過 file 生成目標 url
      var imgURL = URL.createObjectURL(file);
      // 用這個 URL 產生一個 <img> 將其顯示出來
      $('body').append($('<img/>').attr('src', imgURL));
      // 使用下麵這句可以在記憶體中釋放對此 url 的伺服,跑了之後那個 URL 就無效了
      // URL.revokeObjectURL(imgURL);
    }
  });
});

簡要說明

簡單來說整個操作設計如下幾步:

  1. 通過 <file> 的 change 事件觸發事件,並且獲取 event 對象;
  2. 通過 event 對象獲取上傳的文件的 js 對象 file ;
  3. 通過 window.URL 工具從 file 對象生成一個可用的 URL;
  4. 把這個 URL 置入使用;
  5. *釋放這個 URL 的伺服

關鍵點:

  1. 對於同一個 file ,每次調用 URL.createObjectURL 的時候,都會重新生成一個不同的 URL;
  2. 調用 URL.createObjectURL 的時候,瀏覽器自動在記憶體中開闢空間,用於伺服這個 URL,也就是使得這個 URL 可以請求成功;
  3. 如果調用了 URL.revokeObjectURL(imgURL); 之後,這個伺服就會關掉,再請求這個 URL 就會 404;
  4. 這一切都是客戶端的事情,伺服器端對此一無所知,包括你選擇的這個圖;
  5. 這個 imgURL 大概是這個樣子:blob:http%3A//localhost%3A8000/22cc97d5-5e46-4d87-9df4-c3e8c0aa72bb

 


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

-Advertisement-
Play Games
更多相關文章
  • 產生獨特的音樂,背景圖片,照片過濾器和幾何藝術與本月的一批工具。 需要一點點的網頁設計靈感?或者,也許你需要幫助如何啟動一個博客?由於建立一個網站的複雜性不斷增加,所幸也是如此由網路社區製作工具幫助您的質量和數量。 下麵你會發現,為您生成唯一的,無版權的資產,從而迅速解決發現的畫面和音樂和處理相關權
  • html的input輸入框在Chrome瀏覽器里是有預設樣式的,當它獲得焦點時,即使你沒有為它設置:focus時的樣式,Chrome瀏覽器還是會給它加上藍色的邊框,今天百度找到有個方法可以去除該預設樣式。 給需要去除預設樣式的元素加上這麼一條CSS屬性: -webkit-appearance: no
  • Cocos2d-x中的圖像是通過精靈類來顯示的。在Cocos2d-x中游戲中的每一個角色、怪物、道具都可以理解成是一個精靈,游戲背景作為一種特殊的單位將其理解成是一個精靈也沒有什麼不妥。
  • 一、下載 去nodejs下載node.msi安裝文件包,裡面包含了node.js和npm; 雙擊node.msi就行了,選擇安裝路徑和npm; 二、設置環境變數 [新版本都不需要設計環境變數了,軟體會自動寫入環境變數] 電腦(或者我的電腦)右擊屬性-》高級系統設置-》環境變數。 新建一個用戶變數。
  • 分享4種input元素滑塊UI樣式是一款使用CSS3來渲染樣式,使用JavaScript來處理滑塊的滑鼠拖動事件。效果圖如下: 線上預覽 源碼下載 實現的代碼。 js代碼: var range_els = document.querySelectorAll('input[type=range]'),
  • constructor屬性始終指向創建當前對象的構造函數。比如下麵例子: // 等價於 var foo = new Array(1, 56, 34, 12); var arr = [1, 56, 34, 12]; console.log(arr.constructor === Array); // 
  • 1.一列佈局 (一)一列自適應 自適應瀏覽器,隨著瀏覽器的拉伸而變化,一般寬度採用百分比的寫法,很簡<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>一列佈局自適應</title> <style type="t
  • p[name]{background:red;} 只使用屬性名p[name=ghr]{background:red;} 指定屬性名,並指定了該屬性的屬性值p[name~=old]{background:red;}此屬性值是一個詞列表,並且以空格隔開,其中詞列表中包含了一個value詞p[name^=
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...