我得到以下错误,当我尝试保存数据到数据库后,文件上传:
finfo_file(/tmp/phpqE6gyD): failed to open stream: No such file or directory
这是代码:
用户文件夹路径= \Yii::$app-〉user-〉getIdentity()-〉iduser;
$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>');
5条答案
按热度按时间yduiuuwa1#
几周前我也遇到了同样的问题。原来,当我们在上传前重命名文件并试图保存模型时,这个错误就会出现。
如果该属性仅用于处理上载,并且在表中没有字段,则可以在保存之前取消设置这些字段:
$files Model->files = null
.如果你的情况与我的不同,请告诉我。
ddarikpa2#
Yii2通过函数
$model->upload()
使用UploadFile类保存上传文件若要修正
$model->upload
函式中的这种用法:return copy($this->YourAttribute->tempName, $newFileName);
取而代之
return $model->attribute->saveAs($newFileName)
omhiaaxx3#
Clyff是对的。但是如果你要在数据库中保存文件的路径以便以后读取,那么将属性设置为null是行不通的。
问题是当你试图保存模型时,仍然在文件字段中使用UploadedFile::getInstance($model,'file')的结果,该字段已经被$model-〉file-〉saveAs()使用;$model-〉保存()无法直接保存已保存和已删除的临时文件的路径。因此,在成功执行$model-〉file-〉saveAs($path)后,您需要执行以下操作:
$模型-〉文件= $路径;
这对我来说是相当不清楚的,在fileinfo之后花了一点时间,所以希望答案能有所帮助。
7rfyedvj4#
我也遇到了同样的问题,我用这个解决了它:
那么......
重要提示:在
saveAs
函数中传递false
参数。mutmk8jj5#
在**$model-〉保存(false)中使用false参数意味着您忽略了模型验证,这是不正确的。
但是在$file-〉saveAs($path,false)中使用false作为第二个参数意味着您试图在上传后将文件保存在temp文件夹中,并允许模型在尝试保存到数据库时在验证期间访问文件。
如果模型无法访问该文件(即在上载后从临时文件夹中删除),您将收到错误无法打开流,无此类文件/文件夹**