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数组,而后建立为图片。