0

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

1 に答える 1

1

まあ、他の人が言ったように、ワイドイメージ(または任意の画像)の出力をhtmlページにダンプすることはできません。あなたの最善の解決策(そして私が推測するだけでも)は、画像だけを処理する別の関数を作成することです。

今と同じようにhtmlを作成する必要があります。代わりに

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

画像コンテンツを取得していると私は信じています。

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

あなたの関数(actionImage)は同じコントローラーにある必要があります(とにかく私の例では)、ブロブを取得し、やりたいことを何でもしてから画像を出力する必要があります(画像のみでhtmlはありません)。

于 2014-03-13T21:18:21.730 に答える