weinirumo

weinirumo

专治各种上传

  • 财富值6675
  • 威望值50
  • 总积分7605

个人信息

  • 我看了你的代码,视图里边,如果不要多文件上传,就把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);
        }
    }
    ?>
    
  • 2016-11-25 已签到
    连续签到2天,获得了10个金钱
  • 发布了源码
    yii2.0多文件上传源码分享
  • print_r(UploadedFile::getInstance()),看看里边也没有接收到图片信息。

  • 2016-11-24 已签到
    连续签到1天,获得了5个金钱
副总裁 等级规则
7605/10000
资料完整度
20/100
用户活跃度
10/100

Ta的关注

3

Ta的粉丝

17

Ta的访客

48