2017-07-01 2 views
0

Das ist mein Controller:yii2: kann nicht angezeigt werden, weil es einen Fehler enthält

public function actionFind($id, $c, $t, $width = false, $height = false) 
     { 

     $image = \app\models\Picture::finding($id, $c, $t, $width, $height); 


     \Yii::$app->response->format = yii\web\Response::FORMAT_RAW; 
     \Yii::$app->response->headers->add('content-type', 'image/jpeg'); 
     \Yii::$app->response->data = file_get_contents($image); 
     return \Yii::$app->response; 

     } 

Das ist mein Modell:

public static function finding($id, $c, $t, $width = false, $height = false) 
     { 

     $query = new Query; 
     // compose the query 
     $query->select('*') 
       ->from($t) 
       ->where("Active=1 AND Code = $id") 
       ->limit(1); 
     $query->orderBy('Code desc'); 
     // build and execute the query 
     $rows = $query->all(); 
     // alternatively, you can create DB command and execute it 
     $command = $query->createCommand(); 
     // $command->sql returns the actual SQL 
     $rows = $command->queryAll(); 

     if (isset($rows[0]["$c"])) 
      { 

      return $image = "data:image/jpeg;base64," . base64_encode($rows[0]["$c"]); 
      } 

     } 

und das ist mein Fehler:

cannot be displayed because it contains an error 

Mein Bild speichern in der Datenbank !!

Bild: LONGBLOB

in einem anderen Projekt mit Datenbank dieser Code korrekt ausgeführt wird:

header("Content-Type: image/jpeg"); 
if (strlen($image) == 0 || $id == "") 
    { 
    if (!$w) 
     $w = $w1; 
    if (!$h) 
     $h = $h1; 
    if (!$w) 
     $w = 120; 
    if (!$h) 
     $h = 140; 
    $dst = imagecreatetruecolor($w, $h); 

    $gray = imagecolorallocate($dst, 255, 255, 255); 
    imagefill($dst, 1, 1, $gray); 
    if ($q) 
     imagejpeg($dst, NULL, $q); 
    else 
     imagejpeg($dst); 
    } 
+0

Haben Sie überprüft, dass die Daten in der Datenbank richtig codiert? –

+0

Dieses Bild wird korrekt mit einer anderen Quelle geladen! – Saltern

+0

Ich habe versucht, den Display-Bild-Code (Zeilen 8-11) mit einem 64-Base-codierten Bild (von hier https://Stackoverflow.com/a/8499716/4648184) und es zeigt es richtig an, so dass ich das Problem ist die Bilddaten. Chek, wenn Ihr Modell keine leere Zeichenfolge in $ rows bekommt [0] ["$ c"] (Ich habe eine überprüft, ich habe den gleichen Fehler, wenn der Inhalt leer ist) –

Antwort

0

Wie ich in den Kommentaren erwähnt, ich Ihren Code verwendet, um ein Bild anzuzeigen, hier ein Beispiel:

/** 
* Displays homepage. 
* 
* @return string 
*/ 
public function actionIndex() 
{ 
     \Yii::$app->response->format = yii\web\Response::FORMAT_RAW; 
     \Yii::$app->response->headers->add('content-type', 'image/png'); 
     \Yii::$app->response->data = file_get_contents("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA 
AAAFCAYAAACNbyblAAAAHElEQVQI12P4 
    9TXL0Y4OHwAAAABJRU5ErkJggg=="); 
     return \Yii::$app->response; 
} 

Eventhough die Daten in der Datenbank gespeichert wird, wenn Sie es abrufen verschlüsseln, nur in einem String 64-Basis, die ich verwenden, um etwas ähnlich den hartcodierte Zeichenfolge ist. Überprüfen Sie erneut Ihre Daten.

Hinweis: Früher habe ich auch das Bild/jpeg Header mit dem PNG-Bild und es funktionierte, nicht empfohlen, obwohl

+0

!!!!! Ich habe immer noch den vorherigen Fehler – Saltern

+0

können Sie etwas anderes versuchen, könnten Sie einfach entfernen die \ Yii :: $ app-> Antwort-> format = yii \ web \ Response :: FORMAT_RAW; um zu sehen, ob yii etwas auf deiner Seite ausgibt wie eine Ausnahme oder etwas, das uns einen Hinweis geben kann, was gerade passiert? –

+0

Ergebnis hat Bild (mit Zeichen) wie -> FJFIFdd Ducky < Adobed ! 1AQ "aq2 BR br # 3. ... – Saltern

Verwandte Themen