0

私のデータベースが取得する画像の数は多くないので、データベースに直接アップロードしています。ただし、表示に問題があります。ダウンロードしたくないので、ページに表示したいと思います。次のコードで表示しようとしていますが、機能しません。

MyFiles Controllerの関数display():

    function display($id)
   {

      $file = $this->MyFile->findById($id);
    $this->set('image',$file['MyFile']['data']);

   }

MyFileモデル:

    <?php 
class MyFile extends AppModel {

    var $name = 'MyFile';

}

?>

MyFilesControllerの関数add()

function add() {            
    if (!empty($this->data) && 
         is_uploaded_file($this->data['MyFile']['File']['tmp_name'])) {
        $fileData = fread(fopen($this->data['MyFile']['File']['tmp_name'], "r"), 
                                 $this->data['MyFile']['File']['size']);

        $this->request->data['MyFile']['name'] = $this->data['MyFile']['File']['name'];
        $this->request->data['MyFile']['type'] = $this->data['MyFile']['File']['type'];
        $this->request->data['MyFile']['size'] = $this->data['MyFile']['File']['size'];
        $this->request->data['MyFile']['data'] = $fileData;

        $this->MyFile->save($this->request->data);

        $this->redirect(array('controller'=>'posts','action'=>'index'));
    }
}

編集:

MyFilesビューのdisplay.ctp

    <?php

echo '<img src="/MyFilesController/display/4" />';
?>
4

1 に答える 1

3

データベースに画像を保存することは、一般的には良い考えではありません。

Web アクセスできないフォルダーにファイルを保存し、Media Viewsを使用してそれらをレンダリングする方がはるかに優れています (「セキュリティ」のためにこれを行っていると思います)。このようにして、コントローラーを使用して画像をレンダリングしているため、セキュリティチェックを維持できます。

Cakes のメディア ビューは、ファイルをブラウザーにストリーミングするように設計されており、画像用に簡単に構成できます。

2.3にはこのための新しい機能があります

セキュリティ上の理由でこれを行っていない場合は、問題を保存してwebroot.

于 2012-12-17T15:12:30.370 に答える