CakePHP的2.3如何管理文件上传用户,当他们在登录显示的文件吗?(cakephp 2.3 ho

2019-10-17 18:01发布

到目前为止,我所能够做到的就是上传应用程序/文件目录中的文件和使用过时的媒体观点下载。 我无法使用

    $file = $this->Attachment->getFile($id);

我想显示的图像/文件给用户,说喜欢的用户的个人资料图片。 我怎样才能不包括用户图像的安全性这件事。

我得到的错误

    Call to a member function getFile() on a non-object

我不希望使用任何插件一样。

提前致谢。

Answer 1:

你有三种选择;

  1. 创建mod_rewrite的规则,允许通过一个URL来查看访问您的网站根目录外的目录。 通过这种方式,图像不会必须通过一个PHP脚本输出
  2. 创建您的根目录内一个符号链接指向你的网站根目录外的目录。 通过这种方式,图像也将被直接输出由阿帕奇,而不是通过一个PHP脚本。 您可以按照这里的插件资产“的说明: http://book.cakephp.org/2.0/en/plugins.html#plugin-assets
  3. 阅读PHP和输出的文件(的调整后的版本)与PHP的图像,例如通过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文件吗?



Answer 2:

媒体观点在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);
}


文章来源: cakephp 2.3 how to manage file upload for users and display the files when they are logged in?