2016-06-29 16 views
2

Ich habe die Anforderung, ein Dokument auf den Server hochzuladen, da es sich um einen persönlichen Eintrag handelt, der außerhalb des öffentlichen Ordners hochgeladen werden soll. Ich weiß, wie eine Datei laden:Yii 2. Dokument außerhalb des öffentlichen Ordners hochladen

if ($model->load(Yii::$app->request->post())) { 

      $model->document = UploadedFile::getInstance($model, 'document'); 
      if ($model->upload() !== false) { 
       $model->save(); 
      } 

      return $this->redirect(['view', 'id' => $model->id]); 
     } else { 
      return $this->render('create', [ 
       'model' => $model, 
      ]); 
     } 

Aber wie ich es seit einer URL gelesen wird nicht darauf zugreifen können? Ich hatte vor, eine Aktion zu erstellen, um die Datei zu erhalten, aber nicht sicher, ob Yii etwas für diesen Fall bereit hat?

Antwort

2

Ja Yii kann Dateiausgabe senden, aber Sie müssen noch Ihre eigene Aktion erstellen.

Lässt folgenden Code in SiteController annehmen Spezifisch für Bildausgabe, Sie können den gleichen Weg verwenden, um andere Dateien auszugeben.

public function actionImage($image_path) { 
     Yii::$app->getResponse()->sendFile(Yii::getAlias('@image_uploads') . $image_path); 
} 

jetzt Bild src wird so etwas wie

<img src="/site/image?image_path=/posts/1.png" /> oder entspricht der realen Anwendung URL Routen

So Grundfunktion Dateiausgabe von Yii2 zu senden ist

Yii :: $ app-> getResponse() -> sendFile();

sich unter

\ yii \ web \ Response.php

+0

Dank !!. Das war sehr nützlich – Eduardo