php [cakephp:MediaController]用文件二进制文件返回cake的响应对象。 #cakephp

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php [cakephp:MediaController]用文件二进制文件返回cake的响应对象。 #cakephp相关的知识,希望对你有一定的参考价值。

<?php
/**
 * MediaController
 *
 * http://xxxx/media/print/hogehoge.jpg みたいなアクセスに対して
 * ログイン済みだったらファイルをバイナリ返却したいよっていう感じ
 * $this->Auth->user() の方が良いが SessionKey で複数の認証ロールがある想定の手抜き
 * あと $this->shutdown() は Cake のエラー系例外スロー用の独自メソッドを AppController にもたせてる
 * 
 * @link https://book.cakephp.org/3.0/ja/controllers/request-response.html#cake-response-file
 */
namespace App\Controller;

use App\Controller\AppController;
use Cake\Event\Event;

class MediaController extends AppController
{

  
  /**
   * Verify auth session.
   * @param  Cake\Event\Event $event
   * @return void
   */
  public function beforeFilter(Event $event) {
    parent::beforeFilter($event);
    if (!$this->Session->check('Auth')) $this->shutdown(403);
  }


  /**
   * Return getting file from $path in the FILE_PATH.
   * @param  string $path
   * @return Cake\Http\Response - With file by ::withFile().
   */
  public function print(string $path) {
    if (empty($path)) $this->shutdown(404);
    if (!file_exists(FILES_DIR.DS.$path)) $this->shutdown(404);
    $response = $this->response->withFile(FILES_DIR.DS.$path);
    return $response ?? $this->shutdown(500);
  }
  
  
  /**
   * Return cake response with forced download file.
   * @param  string      $path
   * @param  string|null $filename - Should be to url decode.
   * @return Cake\Http\Response    - With file by ::withFile().
   */
  public function download(string $path, string $filename=null) {
    if (empty($path)) $this->shutdown(404);
    if (!file_exists(FILES_DIR.DS.$path)) $this->shutdown(404);
    $options = ['download' => true];
    if (!empty($filename)) $options += ['name' => urldecode($filename)];
    $response = $this->response->withFile(FILES_DIR.DS.$path, $options);
    return $response ?? $this->shutdown(500);
  }


}

以上是关于php [cakephp:MediaController]用文件二进制文件返回cake的响应对象。 #cakephp的主要内容,如果未能解决你的问题,请参考以下文章

php [cakephp:AuthComponent示例] AuthComponent的示例代码。 #cakephp

php [cakephp:DropShell]删除所有应用程序表以进行开发。 #cakephp

php [cakephp:MediaController]用文件二进制文件返回cake的响应对象。 #cakephp

由于缺少 PHP 扩展,CakePHP 3 无法连接到数据库

CakePHP 教程:PHP 开发框架

CakePhp 2.6.3 不适用于 PHP 7