2

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

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

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

我们做错了什么?

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

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

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

1 回答 1

3

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

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

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

于 2013-09-27T18:41:09.983 回答