媒体视图

  • class MediaView

2.3 版后已移除: 请不要再使用,而是使用 发送文件

媒体视图(Media View)允许你发送二进制文件给用户。例如,你也许会希望使用 webroot目录之外的目录存放文件以防止用户直接访问它们。你可以使用媒体视图从 /app/ 中的一个特殊目录中拉取文件,并在传送文件之前验证用户。

要使用媒体视图,你需要告诉你的控制器使用 MediaView 类,而不是缺省的 View 类。然后,只需要传入其它参数指定文件位置:

  1. class ExampleController extends AppController {
  2. public function download() {
  3. $this->viewClass = 'Media';
  4. // 下载 app/outside_webroot_dir/example.zip
  5. $params = array(
  6. 'id' => 'example.zip',
  7. 'name' => 'example',
  8. 'download' => true,
  9. 'extension' => 'zip',
  10. 'path' => APP . 'outside_webroot_dir' . DS
  11. );
  12. $this->set($params);
  13. }
  14. }

下面这个例子渲染的文件,其 mime 类型不在 MediaView 的 $mimeType 数组中。同时使用相对于缺省的 app/webroot 目录的路径:

  1. public function download() {
  2. $this->viewClass = 'Media';
  3. // 渲染 app/webroot/files/example.docx
  4. $params = array(
  5. 'id' => 'example.docx',
  6. 'name' => 'example',
  7. 'extension' => 'docx',
  8. 'mimeType' => array(
  9. 'docx' => 'application/vnd.openxmlformats-officedocument' .
  10. '.wordprocessingml.document'
  11. ),
  12. 'path' => 'files' . DS
  13. );
  14. $this->set($params);
  15. }

可设参数

  • id
  • ID 是位于文件服务器上包括扩展名的文件名。
  • name
  • name 让你可以定义发送给用户的不同的文件名。指定文件名时请不要包括扩展名。
  • download
  • 布尔值,说明是否在头文件中设置为强制下载。
  • extension
  • 文件扩展名。与可接受的 mime 类型内部列表相匹配。如果指定的 mime 类型不在列表中(或者不在 mimeType 参数数组中),这个文件就无法下载。
  • path
  • 目录名,包括最终的目录分隔符。应当是绝对路径,但可以是相对于 app/webroot目录。
  • mimeType
  • 额外 mime 类型的数组,会与 MediaView 的可接受的 mime 类型内部列表合并。
  • cache
  • 布尔值或整数值 — 如果设置为 true,它就会允许浏览器缓存文件(默认为不允许);或者设置成数字,表示缓存将在多少秒之后过期。