Symfony 3.2 - 为使用 imagejpeg() 创建的图像回显 file_get_contents() 时的 HTTP 204
Symfony 3.2 - HTTP 204 when echoing file_get_contents() for an image created with imagejpeg()
我在我的实体中使用 imagejpeg() 函数创建了一个图像 class
$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);
在此之后,我立即 return file_get_contents($path) 到我的 REST API 控制器,它与相应的 header 相呼应(例如 'Content-type: image/jpeg' ) 基于保存在数据库中的图像扩展名。
如果我发送生成的文件,它会给我一个 204 header,没有内容。如果我进入并重命名文件并添加从 google 下载的新图像文件,名称与之前相同,它将发送代码为 200 的图像。删除 google 图像,重命名生成的图像文件恢复正常并尝试再次获取它,它再次 returns 204。
一开始以为是Linux中的权限错误,我跟google图片一样给生成的图片664权限,还是不行。
我还必须补充一点,图像生成正确,可以通过服务器上的 public 目录和任何图像查看应用程序查看。
关于为什么 imagejpeg() 生成的图像无法在使用 PHP 7.2 的 Symfony 3.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;
}
要从您的 symfony 应用程序提供文件,我建议您看一下 file function。
您的控制器应该可以使用此功能。
此函数首先采用参数 a SplFileInfo object 或文件的完整路径。它将好的 headers 和文件内容添加到响应中。
来自控制器的示例代码
public function fileAction()
{
// ....
return $this->file($pathOrSplFileInfo, $fileNameForClientDownload);
}
我在我的实体中使用 imagejpeg() 函数创建了一个图像 class
$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);
在此之后,我立即 return file_get_contents($path) 到我的 REST API 控制器,它与相应的 header 相呼应(例如 'Content-type: image/jpeg' ) 基于保存在数据库中的图像扩展名。
如果我发送生成的文件,它会给我一个 204 header,没有内容。如果我进入并重命名文件并添加从 google 下载的新图像文件,名称与之前相同,它将发送代码为 200 的图像。删除 google 图像,重命名生成的图像文件恢复正常并尝试再次获取它,它再次 returns 204。
一开始以为是Linux中的权限错误,我跟google图片一样给生成的图片664权限,还是不行。
我还必须补充一点,图像生成正确,可以通过服务器上的 public 目录和任何图像查看应用程序查看。
关于为什么 imagejpeg() 生成的图像无法在使用 PHP 7.2 的 Symfony 3.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;
}
要从您的 symfony 应用程序提供文件,我建议您看一下 file function。
您的控制器应该可以使用此功能。
此函数首先采用参数 a SplFileInfo object 或文件的完整路径。它将好的 headers 和文件内容添加到响应中。
来自控制器的示例代码
public function fileAction()
{
// ....
return $this->file($pathOrSplFileInfo, $fileNameForClientDownload);
}