我正在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
并重新启动服务器。
答案 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();
我认为发生的事情是一旦文件被保存,它就会被清除内存,因此当模型试图保存它时会抛出错误。