当前位置: 首页 > 后端技术 > PHP

TP5集成阿里云OSS上传文件第2节,异步上传头像(下)

时间:2023-03-29 19:01:34 PHP

是该功能的最后一步,新增插件:layer.js弹出层组件jquery.form异步表单提交插件-inAddCSS:图层扩展文件修改图层弹窗的皮肤,默认的不喜欢!基本代码与上一节类似,修改了upload.js中的一些东西。先来看看演示吧!简单数据表:--图片表DROPTABLEIFEXISTSimages;CREATETABLEIFNOTEXISTSimages(idINT(11)UNSIGNEDPRIMARYKEYAUTO_INCREMENTCOMMENT'id',img_urlVARCHAR(255)NOTNULLDEFAULT''COMMENT'图片名称',create_timeINTNOTNULLCOMDEFAULT'创建时间',update_timeINTNOTNULLDEFAULT0COMMENT'更新时间')ENGINEinnodbCHARSETutf8COMMENT'图片表';--usertableDROPTABLEifEXISTSuser;CREATETABLEIFNOTEXISTSuser(idINT(11)UNSIGNEDPRIMARYKEYAUTO_INCREMENTCOMMENT'id',img_idint(11)UNSIGNEDNOTNULLDEFAULT0COMMENT'图片ID',create_timeINTNOTNULLDEFAULT0COMMENT'创建时间',update_timeINTNOTNULLDEFAULT0COMMENT'更新时间')ENGINEinnodbCHARSETutf8COMMENT'用户表';之后在aliyunOss配置文件中添加一个配置,就是访问域名;//AliyunOSS配置return['KeyId'=>'***',//YourAccessKeyID'KeySecret'=>'***',//YourAccessKeySecret'Endpoint'=>'****',//阿里云oss外网地址endpoint'Bucket'=>'****',//Bucket名称'OssDomain'=>'http://thinkpjax.cn/',//这个配置是新加的];创建基础模型类(application/index/model/base.php)hasOne('Images','id','img_id');}}创建用户模型(application/index/model/User.php)继承基础模型类创建图片模型(application/index/model/Images.php)');}$face.find($("input[name='imgId']")).val(response.data.imgId);完整代码:/***用户:李昊天*日期:2018/5/18*时间:1:15*Email:haotian0607@gmail.com*/$(function(){var$face=$("#face"),thumbnailWidth=100,thumbnailHeight=100;//创建上传器实例WebUploader.create({server:uploaderUrl,//服务器异步接受地址!pick:{id:"#changeFile",//指定按钮容器用于选择文件multiple:false,//禁止多选},resize:false,//不压缩图片auto:true,//选择后自动上传swf:'../flash/Uploader.swf',//防止低版本浏览器使用flash//只允许选择图片文件accept:{title:'Images',extensions:'gif,jpg,jpeg,bmp,png',mimeTypes:'image/*'}}).on('fileQueued',function(file){//当有afile添加时var$img=$face.find('img');//获取头像的DOM//创建缩略图this.makeThumb(file,function(error,src){if(error){$img.replaceWith('无法预览');return;}$img.attr('src',src);},thumbnailWidth,thumbnailHeight);}).on('uploadProgress',function(file,percentage){//文件上传时实时显示创建进度条。$percent=$face.find(".progress.progress-bar");$ImgId=$face.find($("输入[name='imgId']"));如果(!$ImgId.length){$ImgId=$face.append('');}//避免重复创建if(!$percent.length){//构建进度条DOM$face.append('

');//这是提示框$percent=$('
')。appendTo($face).find('进度条');}$percent.css({'width':50+'%'});//让进度条动起来}).on('uploadSuccess',function(file,response){//文件上传成功,在dialog中添加一个类,使用样式标记上传成功。//找到头像DIV下的dialog,添加成功样式类,将内容改成上传成功显示!$face.find('.dialog').addClass('成功').text('上传成功').show();$face.find($("input[name='imgId']")).val(response.data.imgId);}).on('uploadError',function(file){//文件上传失败,同样是添加Class//找到头像DIV下的dialog添加一个错误样式类,将内容改成上传失败并显示!$face.find('.dialog').addClass('error').text('上传失败').show();}).on('uploadComplete',function(file){//上传完成,成功或失败,先删除进度条。$face.find('.progress').remove();});});修改up.html中的代码:主要是添加表单,添加提交按钮,添加form.js和layer.js的主要部分代码:
选择文件提交修改添加运行的js后端代码也发生了变化:publicfunctionuploadFile(){//sleep(3);$file=request()->file('文件');//获取上传的文件$resResult=Image::open($file);try{$config=Config::pull('aliyun_oss');//获取oss的配置//实例化对象并将配置传递给$ossClient=newOssClient($config['KeyId'],$config['KeySecret'],$config['Endpoint']);//这里是sha1加密生成文件名后的后缀$fileName=sha1(date('YmdHis',time()).uniqid()).'.'.$resResult->type();//执行阿里云上传$result=$ossClient->uploadFile($config['Bucket'],$fileName,$file->getInfo()['tmp_name']);如果($result&&$result['info']['http_code']==200){try{$Images=新图片();//实例化图片模型$Images->allowField('img_url')->save(['img_url'=>$fileName//写入上传的文件名]);returnajaxReturn(parent::SUCCESS,'success',['imgId'=>$Images->id,]);}catch(Exception$e){returnajaxReturn(parent::FAIL,'error');}}else{returnajaxReturn(parent::FAIL,'error');}}catch(OssException$e){返回$e->getMessage();}}修改的时候最好判断表单中传入的imgId和数据库中的ID,如果一致则不允许修改!修改逻辑代码:publicfunctionmodify(){if(request()->isPost()){$userData=(newUserModel())->find(parent::$uid);if(null===$userData){returnajaxReturn(parent::FAIL,'获取用户信息失败,请重新登录!');}$imgId=input('post.imgId','');$result=$userData->allowField('img_id')->save(['img_id'=>$imgId]);if($result){returnajaxReturn(parent::SUCCESS,'修改成功!');}else{returnajaxReturn(parent::FAIL,'操作失败!');}}}upcontroller:publicfunctionup(){/***使用动态关联预加载*/$userData=(newUserModel())->with('img')->find(parent::$uid);返回$this->fetch('up',['data'=>$userData,]);}基本模型类: