簡體   English   中英

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()函數創建了一個圖像

    $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM