2016-03-23 4 views
0

erhalte ich folgende Fehler, wenn ich versuche, Daten in db nach Datei-Upload zu speichern:Yii2 - finfo_file (/ tmp/phpqE6gyD): failed to open stream: Datei oder ein Verzeichnis auf, nachdem Datei speichern laden

finfo_file(/tmp/phpqE6gyD): failed to open stream: No such file or directory 

Dies ist der Code:

$ userFolderPath = \ Yii :: getAlias ​​('@ webroot'). VERZEICHNIS_SEPARATOR. "Dateien". VERZEICHNIS_SEPARATOR. \ Yii :: $ app-> Benutzer-> getIdentity() -> iuser;

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

Antwort

2

Ich hatte das gleiche Problem vor ein paar Wochen. Wenn wir die Datei vor dem Upload umbenennen und versuchen, das Modell zu speichern, wird dieser Fehler angezeigt.

Wenn dieses Attribut nur für den Upload zuständig ist und kein Feld in der Tabelle vorhanden ist, können Sie diese Felder vor dem Speichern einfach aufheben: $files Model->files = null.

Lassen Sie mich wissen, wenn Ihr Szenario anders als meins ist.

0

Yii2 Upload Klasse durch Funktion $model->upload() Upload-Datei

Um dies zu beheben, diese Verwendung in Ihrer $model->upload Funktion zu speichern:

return copy($this->YourAttribute->tempName, $newFileName);

statt

return $model->attribute->saveAs($newFileName)

0

Clyff ist richtig . Aber wenn Sie den Pfad der Datei in der Datenbank speichern, um später zu lesen, wird das Attribut auf Null gesetzt.

Das Problem ist, wenn Sie versuchen, das Modell immer noch mit dem Ergebnis von UploadedFile :: getInstance ($ Modell, 'Datei') in dem Dateifeld zu speichern, das bereits von $ model-> file-> saveAs() verwendet wird; $ model-> save() kann den Pfad des Pfades für gespeicherte und bereits entfernte temporäre Dateien nicht direkt speichern. Also nach erfolgreicher $ model-> file-> saveAs ($ path) müssen Sie etwas tun wie:

$ model-> file = $ pfad;

Es war ziemlich unklar für mich und verbrachte ein wenig Zeit nach Fileinfo, so hoffe die Antwort hilft.

Verwandte Themen