【问题标题】:CakePHP 3 image download corruptCakePHP 3 图像下载损坏
【发布时间】:2017-04-08 06:37:37
【问题描述】:

我已经按照 Cakes Cookbook 发送文件 (http://book.cakephp.org/3.0/en/controllers/request-response.html#sending-files),但我遇到了一个奇怪的问题。 PDF、DOC 和其他二进制文件工作得很好。但是当我尝试下载/显示图像(JPG 或 PNG)时,文件会自行损坏。

下载的文件未被识别为图像。它的大小与原始大小完全相同,但当我对其进行比较时,它们完全不同。

我在网上找不到类似蛋糕的东西,所以希望你能帮助我!

下面的代码是我的下载操作

 public function arquivo($id) {
    $file = $this->Arquivos->get( $id );
    
    $this->response->file($file['filename'], ['download' => true]);
    // Return response object to prevent controller from trying to render
    // a view.
    
    return $this->response;
}

响应标头:

接受范围:字节

Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0

连接:保持活动

内容长度:121000

内容类型:图片/jpeg

日期:格林威治标准时间 2016 年 11 月 24 日星期四 16:17:49

到期时间:1981 年 11 月 19 日星期四 08:52:00 GMT

保持活动状态:超时=5,最大值=100

Pragma:no-cache

服务器:Apache/2.4.10 (Ubuntu)

【问题讨论】:

  • 你检查$file['filename']是你文件的完整路径吗?
  • 是的,我记录了它,它是正确的。此外,它确实会发送具有相同大小和名称的文件。而且,正如我所说,pdf 文件确实有效
  • 您应该调试图像的文件 MIME 类型。
  • 谢谢@SumonSarker!我在我的问题中添加了响应标题。他们表现出不寻常的东西吗? (对不起,我不熟悉这些参数)
  • 文件 MIME/内容类型对于了解正确的文件类型非常重要。如果此类型以某种方式更改或不正确,则文件将损坏。

标签: php cakephp download cakephp-3.x sendfile


【解决方案1】:

检查您的文件路径和 MIME 类型是否正确。

public function arquivo($id) {
    $file = $this->Arquivos->get( $id );
    $this->response->file(
        $file['filename'], #Check $file['filename'] is full path of your download file
        [
           'download' => true,
           'name' => 'Your_Download_File_Name_Here'
        ]
    );
    return $this->response;
}

示例:

您的 $file['filename'] 变量应该是 /path/to/your/file.jpg

还要检查来自 CakePHP 3 Sending or Downloading Files 的正确 MIME TYPES

【讨论】:

    【解决方案2】:

    我在下载 jpg 和 xlsx 文件时遇到了同样的问题。

    我的代码很简单:

    public function download() {
        $response = $this->response->withFile($template_file_path, ['download' => true]);
        return $response;
    }
    

    与使用二进制编辑器的 2 个文件(原始文件和已损坏的下载文件)相比,有 1 个字节的差异。我不知道为什么,但是0x20 被添加到了文件的顶部。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我能够解决它。这个问题是在我最近对另一个控制器的源代码进行更改时引起的,所以我开始在打开的 php tag<?php <? 之后或之前搜索空格。我还删除了我所有 php 文件的闭包 ?>。我知道很难检测到问题出在哪里,但请务必检查您更改的最后文件。即控制器、行为、模型等。

      希望它能解决你的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多