Yii2:finfo_文件(C:\xampp\tmp\php29C.tmp):无法打开流:没有这样的文件或目录

Yii2:finfo_文件(C:\xampp\tmp\php29C.tmp):无法打开流:没有这样的文件或目录,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,获取finfo_文件(C:\xampp\tmp\php29C.tmp)时出错 尝试插入$model->save()在saveAs()之前,但它只上载一个文件,而不是所有文件,也无法获取上载的每个文件在数据库中的路径。 控制器: public function actionCreate() { $model = new RoomTypes(); if ($model->load(Yii::$app->request-&g

获取finfo_文件(C:\xampp\tmp\php29C.tmp)时出错

尝试插入
$model->save()
saveAs()
之前,但它只上载一个文件,而不是所有文件,也无法获取上载的每个文件在数据库中的路径。

控制器:

public function actionCreate()
        {
            $model = new RoomTypes();

            if ($model->load(Yii::$app->request->post()))
            {
                $imageName = $model->room_type;
                     $model->file = UploadedFile::getInstances($model, 'file');

                foreach ($model->file as $file_instance) 
                {
                        $model->save();
                        $file_instance->saveAs('uploads/room_img/' . $file_instance->baseName . '.' . $file_instance->extension);
                        //save the path in the db column
                        $file_instance->$model->images = 'uploads/room_img/'.$imageName.'.'.$file_instance->extension;


                        return $this->redirect(['view', 'id' => $model->id]);
                }
            } 
            else 
            {
                return $this->render('create', 
                    [
                    'model' => $model,
                ]);
            }
        }

有可能我已经在你评论后的最后一次更新中回答了这个问题,但我会在这里添加一个不同的答案,因为这是一个与其他问题不同的问题。保存文件后使用
$file\u instance->baseName
$file\u instance->extension
时会引发此错误。其内容如下:

public function saveAs($file, $deleteTempFile = true)
{
    if ($this->error == UPLOAD_ERR_OK) {
        if ($deleteTempFile) {
            return move_uploaded_file($this->tempName, $file);
        } elseif (is_uploaded_file($this->tempName)) {
            return copy($this->tempName, $file);
        }
    }
    return false;
}
默认情况下,将布尔值
$deleteTempFile
参数设置为true。这意味着它将在保存后删除临时文件,您将无法在同一请求中再次保存上载的文件。如果需要,您可以通过执行以下操作将其设置为false

$file_instance->saveAs('...',false)
但是在这种情况下,这不是一个好的做法,因为您将获得同一文件的两个副本。如果文件已保存到其新路径,为什么不将其从
tmp
文件夹中删除。在调用之前,只需在变量中保留该路径,并在需要时使用它,就像上面链接的答案中所做的那样:

$path = 'uploads/room_img/' . $file_instance->baseName . '.' . $file_instance->extension;
$file_instance->saveAs($path);
$model->images = $path;

您需要解决的其他问题包括:

foreach ($model->file as $file_instance) 
{
     $model->save();
     $model->images = $path;
}
这里的
$model->save()
对我来说没有逻辑。对象的单个实例和foreach文件实例存储在其属性
$model->file
中,您正在一次又一次地保存孔模型。我从第二个(
$model->images=$path
)中了解到,您的模型有一个属性
images
,您可以为该属性指定一个字符串值。但是这里有多个图像,每个图像都有自己的路径,在循环中,每次都用下一个图像路径字符串覆盖它。如果是这种情况,我可能会存储文件夹的路径,以便以后可以在其中找到所有这些图像:

$model->images = 'uploads/room_img/[a_collection_id_or_wathever_unique]/'
在这个文件夹里,我会保存相关的图片。或者,我将托管由
分隔的所有路径或等效代码:

$model->images .= $path . ';';

如果
images
是由ActiveRecord类表示的相关模型,那么上面链接的答案应该会解决它。

Url应该是/uploads/room\u img/,首先用斜杠,还要检查文件夹权限。除其他外,这篇
$file\u instance->$model->images
没有意义。