html5 new FileReader()生成圖片
阿新 • • 發佈:2018-12-04
html5 使用readAsDataURL生成的base64編碼的圖片是2進位制流,其優點是減少http的請求,缺點是不能跨域快取。
注:所以在微信本地上傳圖片直接使用readAsDataURL,安卓是獲取不到圖片的,需要將其轉換為圖片,並存入伺服器,
例如:
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e){
var src=e.target.result ;
var data=src.split(",")[1];
data=window.atob(data);
var ia = new Uint8Array(data.length);
for (var i = 0; i < data.length; i++) {
ia[i] = data.charCodeAt(i);
};
// canvas.toDataURL 返回的預設格式就是 image/png
var blob=new Blob([ia], {type:"image/png" });
var fd=new FormData();
/***** 如果 FormData 物件中的某個欄位值是一個 Blob 物件,則在傳送 HTTP 請求時,代表該 Blob 物件所包含檔案的檔名的 "Content-Disposition" 請求頭的值在不同的瀏覽器下有所不同,Firefox使用了固定的字串"blob",而 Chrome 使用了一個隨機字串。*******/
fd.append('headPhototUrl',blob);
$.ajax({
data:fd,
type:"post",
dataType:"json" ,
processData : false, //使得jquery不處理請求資料
contentType: false, //使得jquery不設定content-type請求頭
url:"/huahan/UploadPhoto.do",
success:function(result){
if(result.errorCode==0){
$(".h_picBox .loadPic").eq(index).find("span").html("<img src='"+ result.data +"' />");
}else{
ajaxError(result.errormsg);
}
}
});
};
})(f);
reader.readAsDataURL(f);