具体要做的就是页面上有个<input type="file" />的按钮,用户在选择需要上传的图片后,页面上将要上传的图片预览出来。
以前的做法是,通过Ajax将要上传的图片上传到服务器,服务器响应成功后在页面上添加一张图片。如果上传错误,则需要将服务器上的图片也删除。
现在可以通过H5这样做,代码如下:
document.querySelector('#upfile').onchange = function (evt) { var files = evt.target.files; for(var i = 0, f; f = files[i]; i++){ if(!f.type.match('image.*')) continue; var reader = new FileReader(); reader.onload = (function(theFile){ return function(e){ var img = document.createElement('img'); img.title = theFile.name; img.src = e.target.result; document.body.appendChild(img); //这里你想插哪插哪 } })(f); reader.readAsDataURL(f); } }
如果要一次上传多张图片,代码如下:
document.querySelector('#upfile').onchange = function () { 2 var fileReader = new FileReader(); 3 fileReader.onload = function (e) { 4 if (fileReader.readyState == FileReader.DONE) { 5 var img = document.createElement('img'); 6 img.src = this.result; 7 document.body.appendChild(img); //示例只是简单插入body 8 } 9 } 10 //一次加载多个文件 11 var i = 0, src = this.files; 12 fileReader.readAsDataURL(src[i]); 13 fileReader.onloadend = function () { 14 i++; 15 if (i < src.length) fileReader.readAsDataURL(src[i]); 16 } 17 }相应的html节点: <input type="file" id="upfile" multiple /> (如果不使用多选除去multiple)