0

使用WideImage扩展,我正在尝试使用此函数从数据库中呈现图像 Blob:

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;
    }
4

1 回答 1

1

好吧,正如其他人提到的那样,您不能将宽幅图像(或任何图像)的输出转储到 html 页面上。您最好的解决方案(我猜也是如此)是创建另一个仅处理图像的函数。

您应该像现在一样创建 html,而不是

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

我相信正在获取图像内容,有一个

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

你的函数(actionImage)应该在同一个控制器中(无论如何在我的例子中)应该得到blob,做你想做的任何事情,然后输出图像(只有图像,没有html)。

于 2014-03-13T21:18:21.730 回答