Отображение PNG из базы данных с использованием WideImage

Используя расширение WideImage, я пытаюсь визуализировать блоб изображения из базы данных, используя эту функцию:

protected function renderControlNonEditable()
    {
        assert('$this->model instanceof Item || $this->model->getModel() instanceof Item');
        $content = null;
        if ($this->model->files->count() > 0)
        {
            $content  .= '<ul class="attachments">';
            foreach ($this->model->files as $fileModel)
            {
                $filecontent = FileContent::getById($fileModel->id);
                $filecontent = $filecontent->content;
                $content .= '<li><span class="icon-attachment"></span>';
                $content .= FileModelDisplayUtil::renderDownloadLinkContentByRelationModelAndFileModel($this->model,
                                                                                                       $fileModel);
                $content .= ' ' . FileModelDisplayUtil::convertSizeToHumanReadableAndGet((int)$fileModel->size);
                $content .= '</li>';
                $content .= WideImage::load($filecontent);
            }
            $content .= '</ul>';
        }
        return $content;
    }

Но когда $content рендеринг показывает следующую строку BLOB вместо рендеринга изображения.

�PNG  IHDRd$��8:IDATh�ݛy|Օ����

Как я могу гарантировать, что правильные заголовки выпускаются? Что я могу сделать, чтобы это исправить?

public function actionImage($model, $fileModel)
    {
         $filecontent = FileContent::getById($fileModel->id);
                $filecontent = $filecontent->content;
        $content = WideImage::load($filecontent);

        return $content;
    }

1 ответ

Решение

Ну, как уже упоминали другие люди, вы не можете сбросить вывод широкоформатного изображения (или любого изображения) на html-страницу. Ваше лучшее решение (и я думаю, только слишком) - это создать еще одну функцию, которая обрабатывает только изображение.

Вы должны создать HTML так же, как вы делаете сейчас, а не

$content .= FileModelDisplayUtil::renderDownloadLinkContentByRelationModelAndFileModel($this->model, $fileModel);            

что я считаю, получить содержание изображения, есть

$content .= '<img src="'.$this->createUrl('image',array('file'=>$fileModel)).'">'

Ваша функция (actionImage) должна быть в том же контроллере (в моем примере в любом случае) должна получить BLOB-объект, делать все, что вы хотите сделать, а затем выводить изображение (и только изображение, без HTML).

Другие вопросы по тегам