weinirumo
我看了你的代码,视图里边,如果不要多文件上传,就把multiple去掉,万一有人一次选多张,就只能上传最后一张。
$model->images 为 NULL 说明你提交的信息没获取到。html部分的代码写的有问题,应该这样写:
<input id="input-700" name="UploadForm[thumb]" type="file" >
控制器里边的代码分析:
public function actionIndex() { $response = []; if (Yii::$app->request->isPost) { $model = new UploadForm(); // 没问题 $model->images = UploadedFile::getInstance($model, 'thumb'); // 如果form表单没写错的话,应该也没问题 $response['images'] = $model->images; // 这一句代码是把一个图片对象赋值给$response,没用 $response['url'] = $model->upload(); // 这一句代码,是对的,但是不全对。因为UploadForm你都没写,里边的upload方法也是没有。 $response['id'] = Yii::$app->request->post('id'); // 这个id有什么用,不太理解。 $response['file'] = $_FILES; // 把$_FILES都返回回来了,什么鬼? $response['post'] = Yii::$app->request->post(); // 这句代码没用 } echo Json::encode($response); }
我修改了一下你的代码,如下:
public function actionIndex() { $response['error'] = 1; // 设置返回的信息 if (Yii::$app->request->isPost) { $model = new UploadForm(); $model->images = UploadedFile::getInstance($model, 'thumb'); $uploadres = $model->upload(); // 调用model的upload方法,这个方法需要去实现。 if ($uploadres['error'] == 0) { $response['id'] = $uploadres['id']; // 上传成功返回的图片id $response['url'] = $uploadres['url']; // 上传成功返回的图片url $response['error'] = 0; // 上传成功的表示,在前端js判断 } else { $response['errmsg'] = $uploadres['errmsg']; // 赋值图片上传的错误信息,在前台输出 } } echo Json::encode($response); }
UploadForm里边的代码你可以参考一下这个,做一些修改就好了:
<?php namespace app\models; use yii\base\Model; class UploadForm extends Model { public $thumb; //用来保存文件 public function rules(){ return [ [['thumb'],'file', 'skipOnEmpty' => false, 'extensions' => 'jpg, png, gif', 'mimeTypes'=>'image/jpeg, image/png, image/gif', 'maxSize'=>1024*1024*10, 'maxFiles'=>1], //设置图片的验证规则 ]; } public function upload(){ $res = []; if ($this->validate()){ //调用验证方法 $uploadpath = dirname(dirname(__FILE__)).'/web/uploads/'; //取得上传路径 if (!file_exists($uploadpath)) { @mkdir($uploadpath, 0777, true); } $ext = $this->thumb->getExtension(); //获取文件的扩展名 $randnums = $this->getrandnums(); //生成一个随机数,为了重命名文件 $imageName = date("YmdHis").$randnums.'.'.$ext; // 重命名文件 $filepath = $uploadpath.$imageName; // 生成文件的绝对路径 if($this->thumb->saveAs($filepath)){ //上传,并保存结果 $res['error'] = 0; } // 还应该有保存到数据库的操作,这个你自己写吧,写完以后把id和url放到$res里边返回给控制器就可以了 } } return $res; //返回结果 } /** * 生成随机数 * @return string 随机数 */ protected function getrandnums() { $arr = array(); while (count($arr) < 10) { $arr[] = rand(1, 10); $arr = array_unique($arr); } return implode("", $arr); } } ?>
问题解决了吗?
- weinirumo 2016-11-25 已签到连续签到2天,获得了10个金钱
- weinirumo 发布了源码yii2.0多文件上传源码分享
print_r(UploadedFile::getInstance()),看看里边也没有接收到图片信息。
- weinirumo 2016-11-24 已签到连续签到1天,获得了5个金钱