提问者:小点点

CakePHP:显示图像、视频、音频、可下载文件outsite webroot文件夹


在我的项目中,我需要将一些文件移到webroot文件夹之外(原因:安全问题)。但是我不知道如何配置显示图像,或者下载文件,这些文件不在webroot文件夹中。文件夹层次结构:

  • cms
    • 应用程序
      • webroot
      • 数据文件(此处的图像、视频、音频)
        • 图像
        • 视频
        • 音频

        成功上传文件到服务器后,我需要保存指向数据库中文件的相对链接。在上面的文件夹层次结构中,如何保存相对链接格式?并在客户端中显示图像


共2个答案

匿名用户

Cakephp在框架中内置了媒体视图。您可以从私有文件系统位置提供这些文件

public function download() {
    $this->viewClass = 'Media';
    // Download app/outside_webroot_dir/example.zip
    $params = array(
        'id'        => 'example.zip',
        'name'      => 'example',
        'download'  => true,
        'extension' => 'zip',
        'path'      => APP . 'outside_webroot_dir' . DS
    );
    $this->set($params);
}

参考:媒体观点

您应该首先上传文件,然后将文件名保存在数据库中。这可以确保您在想要从媒体视图访问文件时拥有该文件的名称。您应该保存文件类型(扩展名)。这可以在您的业务逻辑中使用,以决定您是否要强制下载文件或流内容到浏览器(“下载”=

如果你使用蛋糕2.3也考虑发送文件

匿名用户

  1. 如果你想隐藏这个文件夹的网址,你可以采取第六点的解决方案,我想
  2. 如果您只想用另一个文件夹替代webroot,请更改。htaccess-
    
       RewriteEngine on
       RewriteRule    ^$ app/webroot/    [L]
       RewriteRule    (\.png|\.jpg)$ app/your folder/images/$1
       RewriteRule    (\.mpg)$ app/your folder/videos/$1
       RewriteRule    (\.mp3)$ app/your folder/audios/$1
       RewriteRule    (.*) app/webroot/$1 [L]
    

将首先应用任何匹配的规则。但我不认为这个解决方案更适合你。