到目前为止,我所能够做到的就是上传应用程序/文件目录中的文件和使用过时的媒体观点下载。 我无法使用
$file = $this->Attachment->getFile($id);
我想显示的图像/文件给用户,说喜欢的用户的个人资料图片。 我怎样才能不包括用户图像的安全性这件事。
我得到的错误
Call to a member function getFile() on a non-object
我不希望使用任何插件一样。
提前致谢。
到目前为止,我所能够做到的就是上传应用程序/文件目录中的文件和使用过时的媒体观点下载。 我无法使用
$file = $this->Attachment->getFile($id);
我想显示的图像/文件给用户,说喜欢的用户的个人资料图片。 我怎样才能不包括用户图像的安全性这件事。
我得到的错误
Call to a member function getFile() on a non-object
我不希望使用任何插件一样。
提前致谢。
你有三种选择;
imagejpeg()
函数。 对于这个工作,你应该输出的图像,而无需使用“布局”,并设置合适的响应头。 在“响应”对象的更多信息可以在这里找到: http://book.cakephp.org/2.0/en/controllers/request-response.html#sending-files 我没有时间此刻写的例子,但如果需要的话可以提供一些指针
更新
虽然MediaView在CakePHP的2.3弃用,你仍然可以从它“学习”如何处理文件的下载自己。 大多数在MediaView的“魔力”是集中在响应对象,这是可以在几乎每一个物体内部蛋糕(也是你的控制器内)。 这可能是很容易去MediaView转换为可以附加到你的控制器输出/发送文件的组成部分。
在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解析对于包含用户上传文件的目录/网址。 我已经看到了,用户能够上传情况dangerous_file.php.jpg
,并能在事后重命名文件(删除.jpg
)。
在路径禁用PHP的更多信息可以在这里找到: 禁用PHP目录(包括所有子目录)用的.htaccess
而且,关于最后一点:一定要禁用用户目录中“压倒一切”的设置(例如考虑其中用户能够上传 .htaccess
文件吗?
媒体观点在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);
}