HTML5的文件/圖片上傳服務器方法,使用FileReader

FileReader對象有5種方法,其中四種用於讀取文件,另一種用來讀取過程中斷,需要注意的是:無論讀取成功與失敗,方法並不會返回讀取結果,而是將結果保存在result屬性中。此對象也是異步的。
FileReader對象的方法如下:
readAsBinaryString(file): 
這個方法將blob對象或文件中的數據讀取爲二進制字符串,通常我們將它傳送到服務器端,服務器端可以通過這段字符串存儲文件。
readAsText(file,encoding): 
以純文本形式讀取文件,將讀取到的文本保存在result屬性中,第二個參數用於指定編碼類型,可選的。
 readAsDataURL(file): 
讀取文件並將文件以數據URL的形式保存在result屬性中。
readAsArrayBuffer(file): 
讀取文件並將一個包含文件內容的ArrayBuffer保存在result屬性中。

FileReader對象的事件如下: onabort:  數據讀取中斷時觸發、 onerror: 數據讀取出錯時觸發、onloadstart: 數據讀取開始時觸發、 onprogress: 數據讀取中、onload: 數據讀取成功完成時觸發、onloadend: 數據讀取完成時觸發,無論成功或失敗。
使用例子:
h5部分:
<input id="imagefile" type="file" name="filename" onchange="html5Reader()" />
<img id="preview" alt="image" style="height: 200px;" name="pic" />
js部分:
function html5Reader(file) { 
 if(typeof FileReader == 'undefined') {
 alert("抱歉,你的瀏覽器不支持FileReader,無法圖片上傳"); 
 } 
 var file = file.files[0]; 
 var reader = new FileReader(); 
 reader.readAsDataURL(file); 
//dataurl的格式爲data:image/******;adshgflkasnga,意思是文件頭+二進制串,可用;分割
 reader.onload = function(e) { 
 $.post("./php/UpLoadImage.php",
{ img: e.target.result }, 
//post成功後的回調函數
function(ret) { 
 if(ret.img != '') {
 var pic = document.getElementById("preview");
 pic.src = "./img/" + ret.img; 
 } else { 
 alert('upload fail'); 
 }
},
 'json');
 }
  }

PHP部分:
<?php
$img = isset($_POST['img'])? $_POST['img'] : '';
  
// 獲取圖片,使用“;”分割dataurl格式,然後把文件頭和二進制串分開賦值到數組 //data:image/jpeg;base64,/9j/4AAQSk
list($type, $data) = explode(',', $img); 

// 判斷類型  
if(strstr($type,'image/jpeg')!==''){  
    $ext = '.jpg';  
}elseif(strstr($type,'image/gif')!==''){  
    $ext = '.gif';
}elseif(strstr($type,'image/png')!==''){  
    $ext = '.png';
}  
  
// 生成的文件名  
$photo = time().$ext; 
//生成文件路徑
$photo_path = "../img/{$photo}";
  
// 生成文件 
file_put_contents($photo_path, base64_decode($data), true);  
  
// 數據返回  
header('content-type:application/json;charset=utf-8');  
$ret = array('img'=>$photo_path);
echo json_encode($ret);  
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章