Client/Views/Admin/person.tpl
1.html页面代码,上传文件控件和头像叠放重合,并且把上传控件设为透明,叠放顺序优先级高于<img>
<span style="white-space:pre"> </span><div class="form-group"> <label for="name" class="col-lg-5 col-sm-2 control-label"> <img class="img-thumbnail" style="cursor:pointer;width:100px;margin-left:300px;margin-right:300px;" alt="头像" on="btnHead" src='apis/admin/person/p?params={"url":"${Data.uimage}"}'> <span class="fileinput-button"> <input id="fileupload" type="file" name="files" style="position:absolute;opacity:0;z-index:20;top:7px;height:100px;width:100px;cursor:pointer;margin-left:300px;margin-right:300px;" multiple> </span> <small style="float:both;">如要更换头像,请点击头像</small> </label> </div>
2.在客户端的js,如果上传控件发生变化而触发实现,(并不是点击触发事件)
awf.task({ code: "Data", method: function(e) { //e.success(); _.post("api/admin/person/read", { }, function(r) { //难点 if (r.length > 0) { e.success(r[0]); } else { /*e.result({ "failure":true });*/ } }, "json"); } }).task({ code: "tpl", method: function(e) { app.tpl("Admin->person", function(tpl) { e.success(tpl); }); } }).async({ success: function(result) { result.cid = 'main' + app.genID(); var info = result.tpl(result, {}); app.gui.page(info); app.gui.on(_('#' + result.cid), events); //input改变值而触发事件,change方法 events.parent.find('input[name="file"]').on("change",events.change) events.parent.find('input[name="files"]').on("change",events.btnUpload) //events.parent.find('input[name="files"]').on("btnUpload",events.btnUpload) }, /* failure:function(result){ result.result({ "failure":false }); }*/ });3.调用上传方法
btnUpload:function(sender,arg){ var form = _(sender.target).parents('form'); //var form = events.parent; if(sending){//再点击"发送"按钮,提示文件发送中,在这之前要定义号var sending= false; form.find('.alert-warning').html('文件发送中...').show(); return; } sending = true; var parms = JSON.stringify({t:Date.now()}); form.upload("api/admin/person/upload",{ params:parms, key : auth.key, sign : md5.Sign(parms+auth.sign) },{ failure:function(){ sending = false; }, success:function(str){ sending = false; var r = JSON.parse(str); form.find('.alert').html("").hide(); if(r.status){ form.find('.alert-warning').html(r.status.description).show(); }else{ //form[0]&&form[0].reset(); if (form[0]) { form[0].reset(); } form.find('[name="filename"]').html("无"); events.btnPer(); } }, progress:function(){}, cancel:function(){ sending = false; } }); },
upload: { attribute: { "user":true }, method: function(e) { var _ = this.apis; var ucode = e.action.user.ucode; var sql = "update userbase set uimage=:fileid where ucode=:ucode"; //console.log("files="+files+", "+"path="+path+", "+"id="+id+","+"name=" + name + "," + "type=" + type); //console.log(e.params.files); if(e.params.files && e.params.files.path){ app.store.save({ id:e.params.files.hash, path:e.params.files.path, name:e.params.files.name, type:e.params.files.type }).success(function(fileid){ _.sql.save(sql,{ fileid:fileid, ucode:ucode }).success(function(result){ e.result({ url:fileid }); }).failure(function(){ e.result({ "failure":false }); }); }).failure(function(e){ console.log(e.params.files.hash,e); e.result({ "failure":false }); }).end(); }else{ e.result({ "failure":false }); } } },
5.效果: