到目前为止,我设法做的是将文件上传到app / files目录并使用不推荐的媒体视图下载它们。我无法使用
$file = $this->Attachment->getFile($id);
我想向用户显示图像/文件,比如用户的个人资料图片。如何在不包含用户图像安全性的情况下完成此任务。
我收到错误
Call to a member function getFile() on a non-object
我不想使用任何插件。
提前致谢。
答案 0 :(得分:1)
你有三个选择;
imagejpeg()
函数。为此,您应该在不使用“布局”的情况下输出图像并设置正确的响应标头。有关“响应”对象的更多信息,请访问:http://book.cakephp.org/2.0/en/controllers/request-response.html#sending-files 我目前没有时间编写示例,但如果需要可以提供一些指示
<强>更新强>
尽管在CakePHP 2.3中不推荐使用MediaView,但您仍然可以从中学习如何自行处理文件下载。 MediaView中的大多数“魔术”都集中在Response-object周围,该对象几乎可以在Cake内部的每个对象中使用(也在Controller中)。将de MediaView转换为可以附加到Controller以输出/发送文件的组件可能很容易。
可以在此处找到MediaView的来源: http://api.cakephp.org/2.2/source-class-MediaView.html#23-242
并且,有关通过响应对象发送文件的其他信息可以在我之前提到的链接中找到(http://book.cakephp.org/2.0/en/controllers/request-response.html#sending-files)
重要强>
虽然与您的问题没有直接关系,但有些警告;
用户提供的上传非常危险 始终确保检查文件类型并清理文件名和路径(如果您允许用户指定路径)。始终假设用户能够发送类似“../../../../”的内容作为路径名自己防范该情况
确保禁用PHP解析以查找包含用户上传文件的目录/ URL。我见过用户能够上传dangerous_file.php.jpg
并且之后能够重命名文件的情况(删除.jpg
)。
有关在路径中禁用PHP的更多信息,请访问: Disable PHP in directory (including all sub-directories) with .htaccess
关于最后一点:确保在用户目录中禁用“覆盖”这些设置(例如,考虑用户能够上传的情况一个.htaccess
文件?
答案 1 :(得分:0)
现在在cakephp 2.3
中不推荐使用媒体视图请看这个链接:
http://book.cakephp.org/2.0/en/views/media-view.html
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);
}