首頁  >  文章  >  web前端  >  HTML5實作預覽本機圖片

HTML5實作預覽本機圖片

不言
不言原創
2018-06-05 13:39:043669瀏覽

這篇文章主要介紹了HTML5實作預覽本地圖片的相關資料,需要的朋友可以參考下

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

複製程式碼

程式碼如下:

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

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

複製程式碼

#程式碼如下:

$(function() { 
$(&#39;#upload_image&#39;).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(&#39;图片大小不能超过 2MB!&#39;); 
return false; 
} 
// !!!!!! 
// 下面是关键的关键,通过这个 file 对象生成一个可用的图像 URL 
// 获取 window 的 URL 工具 
var URL = window.URL || window.webkitURL; 
// 通过 file 生成目标 url 
var imgURL = URL.createObjectURL(file); 
// 用这个 URL 产生一个 <img> 将其显示出来 
$(&#39;body&#39;).append($(&#39;<img/>&#39;).attr(&#39;src&#39;, 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 Canvas製作一個簡單的打飛機遊戲

#######

以上是HTML5實作預覽本機圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn