筱筱溺水寒
解决了 23333
参数要写 Users[pic] 0。0html:
<input type="file" class="avatar_input" name="pic" onchange="handleFiles(this,'icon')" multiple> <img src="<?=$info['pic']?>" class="avatar" id="icon">
ajax:
function handleFiles(obj,id) {file = document.getElementById("icon"); var files = obj.files; img = new Image(); if(window.URL){ //File API img.src = window.URL.createObjectURL(files[0]); //创建一个object URL,并不是你的本地路径 img.onload = function(e) { window.URL.revokeObjectURL(this.src); //图片加载后,释放object URL } } //上传文件 var formData = new FormData(); formData.append('pic', files[0]); $.ajax({ type:"post", data:formData, cache:false, contentType:false, processData: false, dataType: "json", url:"<?=Url::to(['users/up-pic'])?>", success:function (data) { console.log(data); if(data.tag == 1){ file.src=img.src; }else{ alert(data.msg) } } })
控制器:
$file = new UploadForm();$model = $this->findPicModel(getUserId()); $opic = $model['pic']; if (Yii::$app->request->isPost) { $file->pic = UploadedFile::getInstance($model, 'pic'); $model->pic = $file->upload('users/'); if ($model->pic) { if($model->save()){ deletePic($opic); return Json::encode(['tag'=>1,'msg'=>'ok']); }else{ deletePic($file->pic); return Json::encode(['tag'=>0,'msg'=>'保存失败']); } }else{ return Json::encode(['tag'=>0,'msg'=>'获取失败']); } }else{ return Json::encode(['tag'=>0,'msg'=>'非法操作']); }
用 ajax 上传文件有点小麻烦。
以下供参考:function test(){ var form = new FormData(document.getElementById("tf")); $.ajax({ url:"${pageContext.request.contextPath}/public/testupload", type:"post", data:form, processData:false, contentType:false, success:function(data){ window.clearInterval(timer); console.log("over.."); }, error:function(e){ alert("错误!!"); window.clearInterval(timer); } }); get();//此处为上传文件的进度条 }
我也是这样写的,控制器是
$_FILES
是能获取图片的,但是UploadedFile::getInstance
这个返回空的,upload 也是空的