方法一:使用js的FileReader對象javascript
1、FileReader對象簡介html
1.檢測瀏覽器對FileReader的支持 java
if(window.FileReader) {jquery
var fr = new FileReader();web
// add your code hereajax
}後端
else {瀏覽器
alert("Not supported by your browser!");ui
}this
調用FileReader對象的方法
FileReader 的實例擁有 4 個方法,其中 3 個用以讀取文件,另外一個用來中斷讀取。下面的表格列出了這些方法以及他們的參數和功能,
須要注意的是 ,不管讀取成功或失敗,方法並不會返回讀取結果,這一結果存儲在 result屬性中。
方法名 |
參數 |
描述 |
abort |
none |
中斷讀取 |
readAsBinaryString |
file |
將文件讀取爲二進制碼 |
readAsDataURL |
file |
將文件讀取爲 DataURL |
readAsText |
file, [encoding] |
將文件讀取爲文本 |
readAsText:該方法有兩個參數,其中第二個參數是文本的編碼方式,默認值爲 UTF-8。這個方法很是容易理解,將文件以文本方式讀取,讀取的結果便是這個文本文件中的內容。
readAsBinaryString:該方法將文件讀取爲二進制字符串,一般咱們將它傳送到後端,後端能夠經過這段字符串存儲文件。
readAsDataURL:這是例子程序中用到的方法,該方法將文件讀取爲一段以 data: 開頭的字符串,這段字符串的實質就是 Data URL,Data URL是一種將小文件直接嵌入文檔的方案。這裏的小文件一般是指圖像與 html 等格式的文件。(其中base64的方式就是由此來得到的。。)
2. FileReader處理事件簡介
FileReader 包含了一套完整的事件模型,用於捕獲讀取文件時的狀態,下面這個表格概括了這些事件。
事件 |
描述 |
onabort |
中斷時觸發 |
onerror |
出錯時觸發 |
onload |
文件讀取成功完成時觸發 |
onloadend |
讀取完成觸發,不管成功或失敗 |
onloadstart |
讀取開始時觸發 |
onprogress |
讀取中 |
文件一旦開始讀取,不管成功或失敗,實例的 result 屬性都會被填充。若是讀取失敗,則 result 的值爲 null ,不然便是讀取的結果,絕大多數的程序都會在成功讀取文件的時候,抓取這個值。
fr.onload = function() {
this.result;
};
例子1:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FileReader</title>
</head>
<body>
<p>
<label>請選擇一個文件:</label>
<input type="file" id="file" />
<input type="button" value="讀取圖像" onclick="readAsDataURL()" />
<input type="button" value="讀取二進制數據" onclick="readAsBinaryString()" />
<input type="button" value="讀取文本文件" onclick="readAsText()" />
</p>
<div id="result" name="result"></div>
</body>
</html>
<script type="text/javascript">
var result=document.getElementById("result");
var file=document.getElementById("file");
//判斷瀏覽器是否支持FileReader接口
if(typeof FileReader == 'undefined'){
result.InnerHTML="<p>你的瀏覽器不支持FileReader接口!</p>";
//使選擇控件不可操做
file.setAttribute("disabled","disabled");
}
function readAsDataURL(){
//檢驗是否爲圖像文件
var file = document.getElementById("file").files[0];
if(!/image\/\w+/.test(file.type)){
alert("看清楚,這個須要圖片!");
return false;
}
var reader = new FileReader();
//將文件以Data URL形式讀入頁面
reader.readAsDataURL(file);
reader.onload=function(e){
var result=document.getElementById("result");
//顯示文件
result.innerHTML='<img src="' + this.result +'" alt="" />';
}
}
function readAsBinaryString(){
var file = document.getElementById("file").files[0];
var reader = new FileReader();
//將文件以二進制形式讀入頁面
reader.readAsBinaryString(file);
reader.onload=function(f){
var result=document.getElementById("result");
//顯示文件
result.innerHTML=this.result;
}
}
function readAsText(){
var file = document.getElementById("file").files[0];
var reader = new FileReader();
//將文件以文本形式讀入頁面
reader.readAsText(file);
reader.onload=function(f){
var result=document.getElementById("result");
//顯示文件
result.innerHTML=this.result;
}
}
</script>
3 、使用js的FileReader對象實現上傳圖片時的圖片預覽功能
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1, user-scalable=no">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="format-detection" content="telephone=no">
<title>test</title>
<script>
//選擇圖片時預覽功能
function imageshow(source){
var file = source.files[0];
var imageid = source.id;
if (window.FileReader) {
var fr = new FileReader();
fr.onloadend = function(e) {
document.getElementById("portrait"+imageid).src = e.target.result;
};
fr.readAsDataURL(file);
}
document.getElementById("image"+imageid).style.display="none";
document.getElementById("show"+imageid).style.display="block";
}
</script>
</head>
<body>
<div >
<div id="image1" >
<p>上傳截圖</p>
<input type="file" name="screenshot1" id="1" onchange="imageshow(this)"/>
</div>
<div id="show1" style="display:none;">
<img src="" id="portrait1" width="100" height="70">
</div>
<div id="image2">
<p>上傳截圖</p>
<input type="file" name="screenshot2" id="2" onchange="imageshow(this)"/>
</div>
<div id="show2" style="display:none;">
<img src="" id="portrait2" width="100" height="70">
</div>
<div id="image3">
<p>上傳截圖</p>
<input type="file" name="screenshot3" id="3" onchange="imageshow(this)"/>
</div>
<div id="show3" style="display:none;">
<img src="" id="portrait3" width="100" height="70" >
</div>
</div>
</body>
</html>
方法二:使用window.createObjectURL
直接上代碼:
<!DOCTYPE html>
<html>
<head>
<title>圖片上傳預覽</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://www.codefans.net/ajaxjs/jquery-1.6.2.min.js"></script>
</head>
<body>
<form name="form0" id="form0" >
<input type="file" name="file0" id="file0" multiple="multiple" />
<br>
<img src="" width="100" height="100" id="img0" >
</form>
<script>
$("#file0").change(function(){
var objUrl = getObjectURL(this.files[0]) ;
console.log("objUrl = "+objUrl) ;
if (objUrl) {
$("#img0").attr("src", objUrl) ;
}
}) ;
//取得該文件的url
function getObjectURL(file) {
var url = null ;
if (window.createObjectURL!=undefined) {
url = window.createObjectURL(file) ;
} else if (window.URL!=undefined) {
url = window.URL.createObjectURL(file) ;
} else if (window.webkitURL!=undefined) {
url = window.webkitURL.createObjectURL(file) ;
}
return url ;
}
</script>
</body>
</html>