0

由于我的数据库不会拍摄大量图像,因此我将它们直接上传到数据库。但是,我在显示它们时遇到问题,我不想下载它们,我想在页面上看到它们。我正在尝试使用以下代码显示,但它不起作用:

MyFiles 控制器的函数 display():

    function display($id)
   {

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

   }

我的文件模型:

    <?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

将图像保存在数据库中通常不是一个好主意。

你会好得多(我假设你这样做是为了“安全”)将文件保存在网络不可访问的文件夹中并使用媒体视图来呈现它们。这样,您仍然可以在使用控制器渲染图像时进行安全检查。

Cakes 媒体视图专为将文件流式传输到浏览器而设计,并且可以轻松配置为图像。

2.3为此有一个新功能

如果您出于安全原因不这样做,请自行解决问题并将其放入webroot.

于 2012-12-17T15:12:30.370 回答