首頁  >  文章  >  web前端  >  HTML5實作預覽本機圖片 _html5教學技巧

HTML5實作預覽本機圖片 _html5教學技巧

WBOY
WBOY原創
2016-05-16 15:45:511716瀏覽

問題描述
假設我們在HTML 裡面有一個圖片上傳控件:

複製代碼
代碼如下:


注意這個 accept="image/*" 非常重要,它指定了上傳的是圖片,在行動端的時候會關聯到系統的彈跳窗選擇類型等問題,務必加上。
然後,問題是,我們在沒有提交這個表單到伺服器之前,有沒有辦法把圖片的內容讀取出來呢?
看似簡單,都是客戶端的文件,應該是可以的,但在之前確實沒什麼好辦法,但是自從有了HTML5,這個功能又回來了,透過FileReader可以輕鬆的實現這個功能。
範例說明問題

複製程式碼
程式碼如下:


程式碼如下:



程式碼如下:$('#upload_image').change(function(event) {
// 根據這個 取得檔案的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 產生一個HTML5實作預覽本機圖片 _html5教學技巧 將其顯示出來
$('body').append($('HTML5實作預覽本機圖片 _html5教學技巧').attr('src', imgURL));
// 使用下面這句可以在記憶體中釋放對此url 的伺服,跑了之後那個URL 就無效了
// URL.revokeObjectURL(imgURL);
} });

});

簡單說明

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

1.透過 的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://localhost:8000/22cc97d5-5e46-4d87-9df4-c3e8c0aa72bb
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn