Yii2 文件上传问题

File uploading issue in Yii2

我正在 Yii2 框架中开发一个应用程序。

我正在使用下面的代码上传一张图片,到目前为止效果很好。但是现在我立即收到错误消息。我不明白发生了什么。

下面是上传文件和保存发生的控制器代码:

// Upload photo of subcategories...
$model->file = UploadedFile::getInstance($model, 'file');
if($model->file) {
    $imageName = rand(1000,100000);
    $model->file->saveAs('uploads/subcategories/'.$imageName.'.'.$model->file->extension);
    $model->sub_category_photo = 'uploads/subcategories/'.$imageName.'.'.$model->file->extension;
}
$model->save();

我遇到以下错误:

PHP Warning – yii\base\ErrorException finfo_file(C:\xampp\tmp\php9A7B.tmp): failed to open stream: No such file or directory

我还在 php.ini 文件中取消注释 extension = fileinfo.dll 并重新启动服务器。

我得到了这个问题的答案。

在控制器中调用$model->save();

之前

$model->file->saveAs();

我的问题上面代码中的意思改为下面

// Upload photo of subcategories...
$model->file = UploadedFile::getInstance($model, 'file');
if($model->file) {
    $imageName = rand(1000,100000);
    $model->sub_category_photo = 'uploads/subcategories/'.$imageName.'.'.$model->file->extension;
    $model->save();
    $model->file->saveAs('uploads/subcategories/'.$imageName.'.'.$model->file->extension);
} else {
    $model->save();
}

希望这对某人有所帮助,因为它帮助了我,我从 here

找到了答案
//Model Rule (note skip on empty):
['file', 'file', 'extensions' => 'jpg, jpeg, gif, png', 'mimeTypes' => 'image/jpeg, image/gif, image/png', 'skipOnEmpty' => true],

//save file
$model->file->saveAs();

//set it to null
$model->file = null;

//now it will save ok
$model->save();

我认为一旦文件被保存,它就会从内存中清除,所以当模型试图保存它时会抛出错误。

在观看次数 > _form.php

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
<?= $form->field($model, 'image')->fileInput() ?>
<?php ActiveForm::end(); ?>

在控制器中:

use yii\web\UploadedFile;

在 actionCreate() 中:

if ($model->load(Yii::$app->request->post())){
    $model->image = UploadedFile::getInstance($model, 'image');            
    if($model->validate() && $model->save()) {                 
        $model->image->saveAs(dirname(__FILE__).'/../../uploads/'. $model->image);   
        $model->save(); 
    }
}

在 actionUpdate() 中:

if ($model->load(Yii::$app->request->post()) ) {           
    $model->image = UploadedFile::getInstance($model, 'image');
    if($model->validate() && $model->save()){
        $model->image->saveAs(dirname(__FILE__).'/../../uploads/'.$model->image);   
        $model->save();
    }
}

在操作中删除($id):

unlink($_SERVER["DOCUMENT_ROOT"]."/../../uploads/".$model->image);