【问题标题】:Symfony 3.2 - HTTP 204 when echoing file_get_contents() for an image created with imagejpeg()Symfony 3.2 - 为使用 imagejpeg() 创建的图像回显 file_get_contents() 时的 HTTP 204
【发布时间】:2018-08-28 11:35:35
【问题描述】:

我在我的实体类中使用 imagejpeg() 函数创建了一个图像

    $imageSize = $this->_getDefaultImageSize();

    $image = imagecreate($imageSize['width'], $imageSize['height']);
    imagecolorallocate($image, 54, 175, 105);

    header('Content-type: image/jpeg');

    imagejpeg($image, $path, null);

    imagedestroy($image);

在此之后,我立即将 file_get_contents($path) 返回到我的 REST API 控制器,该控制器根据数据库中保存的图像扩展名与相应的标头(例如 'Content-type: image/jpeg' )相呼应.

如果我发送生成的文件,它会给我一个 204 标头,没有内容。如果我进入并重命名文件并添加一个从谷歌下载的与以前同名的新图像文件,它将发送带有代码 200 的图像。删除谷歌图像,将生成的文件重命名为正常并尝试获取它再次,它再次返回 204。

一开始我以为是Linux的权限错误,我给生成的图片664权限,和google图片一样,还是不行。

我还必须补充一点,图像正在正确生成,可以通过服务器上的公共目录和任何图像查看应用程序查看。

关于为什么 imagejpeg() 生成的图像不会使用 PHP 7.2 在 Symfony 3.2 上发送的任何想法?

【问题讨论】:

  • 要从你的 symfony 应用程序中提供文件,我建议你看看 vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/ControllerTrait.php 中的 file 函数。您的控制器应该可以使用此功能
  • 谢谢,这解决了我的问题。
  • 我可以将其发布为答案吗?
  • 是的,当然:)

标签: symfony symfony-3.2 php-7.2 symfony3.x


【解决方案1】:

要从您的 symfony 应用程序中提供文件,我建议您查看file function

您的控制器应该可以使用此功能。

这个函数的第一个参数是SplFileInfo 对象或文件的完整路径。它将好的标题和文件内容添加到响应中。

来自控制器的示例代码

public function fileAction()
{
    // ....

    return $this->file($pathOrSplFileInfo, $fileNameForClientDownload);
}

【讨论】:

    【解决方案2】:

    在您的控制器中使用此代码

    <?php
    
         public function action()
         {
             $imageSize = $this->_getDefaultImageSize();
    
             $image = imagecreate($imageSize['width'], $imageSize['height']);
             imagecolorallocate($image, 54, 175, 105);
    
             $tmpName = tempnam(sys_get_temp_dir(), 'img') . '.jpg') 
    
             imagejpeg($image, $tmpName, null);
    
             $response = new \Symfony\Component\HttpFoundation\BinaryFileResponse($path)
                    ->deleteFileAfterSend(true);
    
             return $response;
         }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 2014-03-15
      • 2011-05-16
      • 2017-08-26
      • 2016-11-19
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      相关资源
      最近更新 更多