CakePHP 1.3媒体视图无法正确下载ZIP文件

时间:2013-08-29 13:56:37

标签: cakephp download zip cakephp-1.3 media

我最近将我的网站从CakePHP 1.1迁移到1.3。

我现在使用媒体视图下载文件,但是,我遇到了一个主要问题。

当我通过媒体视图下载zip文件并尝试解压缩时,Windows声称该文件为空。如果我尝试预览它,它说它无效。

  • 文件大小正确,与服务器上的大小相同
  • 我可以通过FTP从服务器下载完全相同的文件,这是正确的
  • 我可以通过媒体视图下载pdf文件,并且IT工作正常(但ZIP文件没有)

这是我的控制器代码:

        $this->view = 'Media';
    $downloadparams = array(
          'id' => 'junkstuff'.'.zip',
          'name' => 'junk3',
          'download' => true,
          'extension' => 'zip',  // must be lower case
          'path' => APP . 'tmp/files' . DS   // don't forget terminal 'DS'
     );
   $this->set($downloadparams);

同样,如果我更改为pdf文件,并将“扩展名”更改为“pdf”,则一切正常。 调试设置为0 我的代码用法直接来自1.3 Cakebook:http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Views.html

有趣的是,他们使用zip作为蛋糕书中的一个例子......

我可能做错了什么?

作为参考,这个帖子似乎是完全相同的问题,但它也没有答案: when opened with winrar, Zip file obtained through Cakephp MediaViews reports Unexpected end of archive

2 个答案:

答案 0 :(得分:0)

您的内容类型可能有误(在不使用响应类时会发生这种情况 - 当然,您无法在1.3中执行此操作):

Content-Type    application/octet-stream

最好是

Content-Type    application/x-compressed

内容长度也许有用。 您可以尝试使用header()手动添加这些标头。

答案 1 :(得分:0)

事实证明,当我将网站放在实时服务器上时(它位于服务器上,而不是我的“测试”服务器),这个问题已经解决了。我唯一可以想到的是某个地方有一个参考或安全检查,引用了官方网站名称。我的测试网站有不同的网站地址。

这是猜测。我真的不确定它自己修复了什么。但我没有更改代码,它开始在现场工作。