在我的项目中,我需要将一些文件移到 webroot 文件夹之外(原因:安全问题)。但我不知道要配置显示图像或不位于 webroot 文件夹中的可下载文件。文件夹层次结构:
- 厘米
- 应用程序
- 网络根
- data_file(图片、视频、音频在这里)
- 图片
- 视频
- 音频
- 应用程序
成功上传文件到服务器后,我需要保存指向数据库中文件的相关链接。使用上述文件夹层次结构,我如何保存相对链接格式?并在客户端显示图像(它们)
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);
}
参考:媒体浏览量
您应该首先上传文件,然后将文件名保存在数据库中。这可确保您在想要从媒体视图访问文件时拥有文件名。您应该保存文件类型(扩展名)。这可以在您的业务逻辑中用于决定是否要强制将文件或流内容下载到浏览器('download' => false)。
如果您使用的是 cake 2.3+,还可以考虑发送文件
重写引擎开启 RewriteRule ^$ app/webroot/ [L] RewriteRule (\.png|\.jpg)$ app/你的文件夹/images/$1 RewriteRule (\.mpg)$ app/你的文件夹/videos/$1 RewriteRule (\.mp3)$ app/你的文件夹/audios/$1 RewriteRule (.*) app/webroot/$1 [L]
任何匹配的规则都将首先应用。但我不认为这个解决方案更适合您的目的。