Yii2

时间:2015-05-11 07:11:27

标签: file-upload 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警告 - yii \ base \ ErrorException       finfo_file(C:\ xampp \ tmp \ php9A7B.tmp):无法打开流:没有这样的文件或目录

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

3 个答案:

答案 0 :(得分:7)

我得到了这些问题的解决方案。

在控制器中调用$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

找到答案

答案 1 :(得分:1)

在视图中>的 _form.php这个

initialized

在控制器中:

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

在actionCreate()中:

use yii\web\UploadedFile;

在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(); 
    }
}

在actionDelete($ id)中:

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();
    }
}

答案 2 :(得分:0)

//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();

我认为发生的事情是一旦文件被保存,它就会被清除内存,因此当模型试图保存它时会抛出错误。