[英]Symfony 3.2 - HTTP 204 when echoing file_get_contents() for an image created with imagejpeg()
我在實體類中使用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控制器,該REST API控制器根據持久化在數據庫中的圖像擴展名,使用相應的標頭(例如,'Content-type:image / jpeg')進行回顯。
如果我發送生成的文件,它將給我204標頭,沒有內容。 如果我重新命名該文件並添加一個從Google下載的新圖像文件,其名稱與以前相同,它將使用代碼200發送該圖像。刪除Google圖像,將生成的文件重命名為正常文件,然后嘗試獲取它再次,它再次返回204。
起初我以為這是Linux中的權限錯誤,我給生成的圖像664權限就像Google圖像一樣,但它仍然不起作用。
我還必須補充一點,該圖像是正確生成的,可以通過服務器上的公共目錄以及任何圖像查看應用程序進行查看。
關於為何使用PHP 7.2為什么imagejpeg()生成的圖像無法在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函數 。
該功能應該可以從您的控制器上獲得。
該函數首先使用SplFileInfo對象或文件的完整路徑作為參數。 它將好的標頭和文件內容添加到響應中。
來自控制器的示例代碼
public function fileAction()
{
// ....
return $this->file($pathOrSplFileInfo, $fileNameForClientDownload);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.