当我尝试在文件上传后将数据保存到数据库中时出现以下错误:
finfo_file(/tmp/phpqE6gyD): failed to open stream: No such file or directory
这是代码:
$ userFolderPath = \ Yii :: getAlias(' @ webroot')。 DIRECTORY_SEPARATOR。 '文件' 。 DIRECTORY_SEPARATOR。 \ Yii的:: $ APP->用户>的getIdentity() - > ID用户所;
$model = new CsFile();
$files = UploadedFile::getInstances($model, 'files');
$errors = [];
if (!file_exists($userFolderPath))
mkdir($userFolderPath, 0777, true);
foreach($files as $file):
$fileModel = new CsFile();
$fileModel->files = $file;
if($fileModel->validate()):
$filename = str_replace(' ', '_', $file->baseName);
if(file_exists($userFolderPath . DIRECTORY_SEPARATOR . $filename . "." . $file->extension)):
$filename .= "-" .uniqid();
endif;
$fileModel->files
->saveAs($userFolderPath .DIRECTORY_SEPARATOR. $filename . '.' . $fileModel->files->extension);
$fileModel->iduser = Yii::$app->user->getIdentity()->iduser;
$fileModel->name = $filename;
$fileModel->extension = $file->extension;
$fileModel->add_date = date('Y-m-d H:i:s');
$fileModel->save();
else:
endif;
endforeach;
var_dump('<pre>', $errors, '</pre>');
答案 0 :(得分:2)
几个星期前我遇到了同样的问题。事实证明,当我们在上传之前重命名文件并尝试保存模型时,会出现此错误。
如果该属性仅用于处理您的上传并且表格中没有字段,则可以在保存之前取消设置此字段:$files Model->files = null
。
如果您的情况与我的情况不同,请告诉我。
答案 1 :(得分:0)
Yii2通过函数$model->upload()
使用UploadFile类来保存上传文件
要在$model->upload
功能中修复此用途:
return copy($this->YourAttribute->tempName, $newFileName);
而不是
return $model->attribute->saveAs($newFileName)
答案 2 :(得分:0)
问题是当你试图在$ model-&gt; file-&gt; saveAs()已经使用的文件字段中保存模型时仍然使用UploadedFile :: getInstance($ model,'file')的结果; $ model-&gt; save()无法直接保存已保存和已删除的临时文件路径。 因此,在成功获得$ model-&gt; file-&gt; saveAs($ path)后,您需要执行以下操作:
$ model-&gt; file = $ path;
我很不清楚并在fileinfo之后花了一些时间,所以希望答案有所帮助。
答案 3 :(得分:0)
我遇到了同样的问题,为此我解决了该问题:
$model->file->saveAs($filepath , false)
然后...
$model->save(false)
重要提示:在saveAs
函数中,传递false
参数。
答案 4 :(得分:0)
在 $ model-> save(false)中使用 false 参数,这意味着您正在忽略模型验证,这是不正确的。
但是在 $ file-> saveAs($ path,false)中使用 false 作为第二个参数意味着您试图将文件保持在 temp 文件夹后,在尝试保存到数据库时允许模型在验证期间访问文件。
如果模型无法访问文件(即在上传后从临时文件夹中删除),则会显示错误无法打开流,没有此类文件/文件夹< / strong>