HTTP图像输出提供Blob数据而不是图像

时间:2019-01-26 08:47:58

标签: php mysql http yii2

我的网址看起来像.... / image / view?id = 6

导航到该URL应该可以从我的数据库中获得图像。 但是目前,我得到了一堆奇怪的字符作为回应。

当我输出(见下文)时,我正在看到我的图像。

<img src="data:image/jpeg;base64,'.base64_encode( $image->Data ).'"/>

我正在使用这段代码来生成我的HTTP响应,但是响应只是blob数据:

 header('Content-Type :'.$image->Extension);
 header('Content-Disposition: filename='.$image->Name.'.'.$image->Extension);
 header('Content-Length: ' . strlen($image->Data));
 $response->format = Response::FORMAT_RAW;
 $response->data = $image->Data;

当前输出始于:

����JFIF��>CREATOR: gd-jpeg v1.0 (using IJG JPEG v90), default quality ��C     $.' ",#(7),01444'9=82<.342��C     2!!22222222222222222222222222222222222222222222222222���"��    ���}!1AQa"q2���#B��R��$3br� 

使用的标题:

   Accept-Ranges: bytes
   Cache-Control: private
   Content-Disposition: inline;        filename="FYdsl67l4PWJQ7QFFeo14Ena76gr0pEP.jpg"
   Content-Length: 320135
   Content-Type: image/jpeg
   Date: Mon, 28 Jan 2019 19:05:11 GMT
   Expires: 0
   Pragma: public
   Server: Microsoft-IIS/8.5
   X-Powered-By: PHP/5.6.24, ASP.NET

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:2)

如果图像进入数据库时​​是经过base64编码的,则要显示它,您要么需要

  1. 使用base64_decode($img),然后显示它。或
  2. 执行此操作:回显'<img src="data:image/jpeg;base64,' . $image->Data . '"/>;

您似乎正在做的是再次对其进行编码。

答案 1 :(得分:0)

您可能应该使用Response::sendContentAsFile()发送此文件:

return Yii::$app->response->sendContentAsFile(
    $image->Data, 
    $image->Name . '.' . $image->Extension, 
    ['mimeType' => FileHelper::getMimeTypeByExtension($image->Name . '.' . $image->Extension)]
);

请注意,Conent-Type标头与文件扩展名不同-请参考FileHelper::getMimeTypeByExtension()

答案 2 :(得分:0)

问题已修复,似乎我的文件编码不正确... 文件必须是iso而不是utf-8