CakePHP:使用$ this-> response-> file()时如何设置文件名

问题描述 投票:1回答:1

我们发送一个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个回答
2
投票

啊!我们弄清楚出了什么问题......

注意上面代码第一行中的downlaod这个词?那是罪魁祸首。显然,糟糕的选择导致整个数组被忽略。我不确定这对未来是否会有所帮助,但我想我会把它留下来提醒一下CakePHP选项是这样工作的(在这种情况下至少)。

PS:每当你被困住,去散步回来吧!

© www.soinside.com 2019 - 2024. All rights reserved.