base64,byte前端
----------------------------------------------------------------------------------------數組
byte上傳:服務器
FileReader.readAsArrayBuffer//將file讀取爲ArrayBufferasync
base64上傳post
FileReader.readAsDataUrl//將file讀取爲Url。url
----------------------------------------------------------------------------------------spa
====Byte上傳===code
前端blog
<input type="file" onchange="wl(event)" filetype="image/*"/>
Js圖片
function FW(event) var input = event.target; var reader = new FileReader(); reader.onload = function(){ var dataAF = reader.result; httpHelper({ type:'post', async:'true', data:dataAF, success:function(){ //上傳成功 }, error:function(){ //上傳失敗 } }); }; reader.readAsDataBuffer(input.files[0]); }; function httpHelper(params) { var request; if(XMLHttpRequest) request=new XMLHttpRequest(); else request=new ActiveXObject("Microsoft.XMLHTTP"); request.onreadystatechange = function () { if (request.readyState == 4) { if (request.status == 200) { if (params.success) params.success(request.responseText); } else if (parseInt(request.status / 100) == 4) { if (params.error) params.error(request.responseText); } } } request.open(params.type, params.url, params.async); try { request.send(params.data||null); } catch (e) { if (params.error) params.error(request.responseText); } }
後臺直接從request的stream讀取,儲存爲圖片就行了,圖片格式能夠放到請求頭裏。
----------------------------------------------------------------------
======base64=======
又時讀取文件是圖片,讀取以後提供要瀏覽。這時須要把file讀取爲Url,把Url上傳到服務器後須要對Url進行分解才能獲得本身想要的圖片base64數據。
若是用get請求上傳圖片時,有些base64特殊字符會被轉義(=,+,-),此時須要在服務端還原。而後把base64解碼爲byte數組,而後建立爲圖片。