yii (/tmp/phpqE 6 gyD)文件名:无法打开流:文件上载后保存时没有此类文件或目录

wnavrhmk  于 2022-11-09  发布在  PHP
关注(0)|答案(5)|浏览(199)

我得到以下错误,当我尝试保存数据到数据库后,文件上传:

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>');
yduiuuwa

yduiuuwa1#

几周前我也遇到了同样的问题。原来,当我们在上传前重命名文件并试图保存模型时,这个错误就会出现。
如果该属性仅用于处理上载,并且在表中没有字段,则可以在保存之前取消设置这些字段:$files Model->files = null .
如果你的情况与我的不同,请告诉我。

ddarikpa

ddarikpa2#

Yii2通过函数$model->upload()使用UploadFile类保存上传文件
若要修正$model->upload函式中的这种用法:
return copy($this->YourAttribute->tempName, $newFileName);
取而代之
return $model->attribute->saveAs($newFileName)

omhiaaxx

omhiaaxx3#

Clyff是对的。但是如果你要在数据库中保存文件的路径以便以后读取,那么将属性设置为null是行不通的。
问题是当你试图保存模型时,仍然在文件字段中使用UploadedFile::getInstance($model,'file')的结果,该字段已经被$model-〉file-〉saveAs()使用;$model-〉保存()无法直接保存已保存和已删除的临时文件的路径。因此,在成功执行$model-〉file-〉saveAs($path)后,您需要执行以下操作:
$模型-〉文件= $路径;
这对我来说是相当不清楚的,在fileinfo之后花了一点时间,所以希望答案能有所帮助。

7rfyedvj

7rfyedvj4#

我也遇到了同样的问题,我用这个解决了它:

$model->file->saveAs($filepath , false)

那么......

$model->save(false)

重要提示:在saveAs函数中传递false参数。

mutmk8jj

mutmk8jj5#

在**$model-〉保存(false)中使用false参数意味着您忽略了模型验证,这是不正确的。
但是在
$file-〉saveAs($path,false)中使用false作为第二个参数意味着您试图在上传后将文件保存在temp文件夹中,并允许模型在尝试保存到数据库时在验证期间访问文件。
如果模型无法访问该文件(即在上载后从
临时文件夹中删除),您将收到错误无法打开流,无此类文件/文件夹**

相关问题