這篇文章主要介紹了HTML5實作預覽本地圖片的相關資料,需要的朋友可以參考下
問題描述
假設我們在HTML 裡面有一個圖片上傳控制項:
複製程式碼
程式碼如下:
<input id="upload_image" type="file" name="image" accept="image/*" />
注意這個accept="image/*" 非常重要,它指定了上傳的是圖片,在行動端的時候會關聯到系統的彈跳窗選擇類型等問題,務必加上。
然後,問題是,我們在沒有提交這個表單到伺服器之前,有沒有辦法把圖片的內容讀出來呢?
看似簡單,都是客戶端的文件,應該是可以的,但在之前確實沒什麼好辦法,但是自從有了HTML5,這個功能又回來了,透過FileReader可以輕鬆的實作這個功能。
範例說明問題
複製程式碼
#程式碼如下:
$(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.透過28897b20adb25fbae118a3f80f538dec 的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
相關推薦:
#######
以上是HTML5實作預覽本機圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!