Yii2:finfo_文件(C:\xampp\tmp\php29C.tmp):无法打开流:没有这样的文件或目录
获取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
尝试插入$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
没有意义。