Yii2上传图片文件不保存文件,但我看到帖子数据OK

时间:2016-01-11 18:09:08

标签: php file-upload yii2 image-uploading

我有下一个表格:

$form = ActiveForm::begin(['id' => 'form-profile-edit', 'options' => ['enctype' => 'multipart/form-data']]); ?>
     <?= Html::activeFileInput($model, 'image_upload', ['class' => 'hidden', 'id' => 'file-avatar', 'accept' => 'image/*', 'onchange' => 'javascript:this.form.submit()'])?>
<?php ActiveForm::end();

该模型中的规则:

['image-upload', 'file', 'extensions' => ['png', 'jpg', 'jpeg'], 'maxSize' => 45000],
[['image-upload'], 'safe'],

这个代码在控制器中:

if ($model->load(Yii::$app->request->post())) {

            $file = \yii\web\UploadedFile::getInstance($model, 'image_upload');
            if ($file) {
                //print_r($_FILES);
                echo "<br>pathactual: " . getcwd();
                echo "<br>basename: " . $file->baseName;
                echo "<br>extension: " . $file->extension;
                echo "<br>name: " . $file->name;
                echo "<br>SaveUrl: " . Yii::$app->homeUrl . "assets/avatars/" . $file->baseName . "." . $file->extension;
                echo "<br>Error: " . $file->error; //This shows 0
                echo "Size: " . $file->size;

                $model->avatar = $file->baseName. "-big." . $file->extension;

                if($model->update(true, ["avatar"])){
                    echo "<br>avatar actualizado";
                    Yii::$app->getSession()->setFlash('profile-Msg-OK', Yii::t("app", "Generic_Changes_OK"));
                    //Guardamos el fichero del avatar
                    if($file->saveAs(Yii::$app->homeUrl . "assets/avatars/" . $file->baseName . "-big." . $file->extension)){
                        echo "<br>Imagen guardada correctamente.";
                    }else{
                        echo "<br>Imagen no guardada correctamente: " . $file->error; //This shows 1

                    }
             }

}

我可以看到$ file对象的正确,大小,tempName,baseName,扩展名。我将头像名称保存在$ model-&gt; avatar中,然后我进行更新。这很好。

现在,我执行saveAs方法但总是输入else,此时$ file-&gt; errror值为1.我看到UploadedFile文档并看到:

  

$ error integer描述此文件状态的错误代码   上传。

搜索可能的状态here,我看到1对应于:

  

UPLOAD_ERR_INI_SIZE值:1;上传的文件超过了   php.ini中的upload_max_filesize指令。

然后,我转到我的php.ini文件(我从phpinfo修改了它)我有40M

  

upload_max_filesize 40M 40M

我用来测试的文件有14和16 KB。 对此有何想法?

如果有人需要更多信息,请发表评论

1 个答案:

答案 0 :(得分:1)

您需要更正保存路径

if($file->saveAs(Yii::$app->homeUrl . "assets/avatars/" . $file->baseName . "-big." . $file->extension))

这里

Yii::$app->homeUrl

不是你想要的,因为它是你的应用程序的网址,你需要像

这样的东西
if($file->saveAs(Yii::getAlias('@webroot') . "/assets/avatars/" . $file->baseName . "-big." . $file->extension))

文件系统中的绝对路径