【问题标题】:CakePHP: How to set file name when using $this->response->file()CakePHP:使用 $this->response->file() 时如何设置文件名
【发布时间】:2013-09-27 14:00:35
【问题描述】:

我们正在发送一个 zip 文件下载作为响应,如下所示:

    $this->response->file( "/export/stuff.zip", array('downlaod'=>true, 'name'=>"stuff.zip") );
    return $this->response;

这工作正常,但文件始终命名为export.zip。我们的name 选项似乎没有任何效果。我们也尝试过不使用 .zip 扩展名。这很令人困惑,因为name 选项在文档中显示为here

我们做错了什么?

更新: 我们发现看似随意的名称“export”是从控制器操作的名称中复制而来的。我们将方法名称更改为“admin_exportt”,然后每次都会得到 exportt.zip。这在我见过的任何地方都没有记录。

我们找到了在源代码中处理名称的位置 (/lib/Cake/Nework/CakeResponse.php:1254),它似乎应该使用原始文件名,或者在 name 中指定的任何名称选项:

        if (is_null($options['name'])) {
            $name = $file->name;
        } else {
            $name = $options['name'];
        }

【问题讨论】:

    标签: php cakephp cakephp-2.0 download


    【解决方案1】:

    啊!我们发现出了什么问题……

    注意到上面代码第一行中的downlaod 一词了吗?这就是罪魁祸首。显然,这个错误的选择导致整个数组被忽略。我不确定这是否会在将来对任何人有所帮助,但我想我会留下它以提醒一下 CakePHP 选项以这种方式工作(至少在这种情况下)。

    PS:遇到困难就出去走走再回来!

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 2021-11-19
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 2012-02-24
      • 1970-01-01
      相关资源
      最近更新 更多