Laravel Response :: download()函数图像问题

时间:2015-08-24 13:14:14

标签: php image laravel laravel-5

我正在使用Laravel 5.我正在创建各种各样的照片库。单击图像时我使用

Response::download($path,$filename,$headers);

开始下载文件。

以下是我的代码:

路线

Route::get('test/{filename}', 'ImageController@getDownload');

当用户进入test / example.png时,它会运行getDownload函数

控制器

public function getDownload($filename){
    // Define the path and the extension
    $file = public_path() . "/uploads/" . $filename;
    $ext = pathinfo($filename, PATHINFO_EXTENSION);

    if($ext == 'png' || 'PNG'){
      $headers = array(
          'Content-Type:image/png',
        );
    }

    else if($ext == 'jpg' || 'jpeg' || 'JPEG' || 'JPG'){
      $headers = array(
          'Content-Type:image/jpeg',
        );
      }

      else if($ext == 'gif' || 'GIF'){
      $headers = array(
          'Content-Type:image/gif',
        );
      }

      $response = Response::download($file, $filename, $headers);

      return $response;

}

在此函数中,我声明了文件的路径并设置了下载。

查看

@foreach ($fileList as $uploadedFiles)
    <div class='img'>
    <a href="test/{{$uploadedFiles}}"/><img src="{{ $uploadsFolder}}/{{   $uploadedFiles }}"/></a>
    </div>  

@endforeach

在我的视图中,我使用循环来获取文件名,然后创建一个转到test / $ filename的链接,该链接调用Controller中的方法。

问题

使用这种方法似乎可行,因为我可以下载docx文件,PDF,txt文件,csv文件等。但是,当下载图像时,当我打开它时,我得到“图像无法显示”。

在我的uploads文件夹中,我有一张名为cake.JPG的图片。

下载时,请求标题如下:

  • 接受:text / html,application / xhtml + xml,image / jxr,
  • 接受编码:gzip,deflate
  • 接受语言:en-GB
  • 连接:Keep-Alive
  • 的Cookie:XSRF-TOKEN = eyJpdiI6ImhMYUJwRThtMWY3eFozblRibkVzQkE9PSIsInZhbHVlIjoiMUxBZzRPTXVkYU9pWXhnWjdYcGlPNlFcL0I1UWViN0QwcDlnbXNsMTE5cExqVk1KZlh0WGhKaldyYVMrVVo0XC9LMnNNODFLZjlQQmZTdFpQRUVKTklldz09IiwibWFjIjoiYTIxODNiYmVmNDc0ZjMzOTQ2YzI1MmM2ZTQ1OGIwNmE4YWVjOTQ0OTYwZjRiMThmMGFiMjc0NjNmN2FlMDQyOCJ9; laravel_session = eyJpdiI6ImxTS3dUayt1UnRNMlhlS0ZrNlVLU1E9PSIsInZhbHVlIjoiZGVWVmJcL3FIc09pQnQxdHlnSzJcL1J3UzhYTnl6WjNxY3crZ3BreXNqb09sdWY1OXlaRkE2YW1pUDhBZ2Frc2ZPMEFWNlg3MkRrTmI1MFhWXC9UOFdiWVE9PSIsIm1hYyI6Ijk2NTQ0MzkzMDExMmI2MzJmZGM0NGI4Yzk4Yzc4NzhmYTYyODIwNzFiYzA2ZDQ5NDk5ZjY3MDY0NDZmOTVkZTIifQ%3D%3D
  • 主持人:localhost
  • Referer:http://localhost/lara-mvc/public/gallery
  • User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 42.0.2311.135 Safari / 537.36 Edge / 12.10240

响应标头如下:

  • 连接:Keep-Alive
  • 的Cookie:XSRF-TOKEN = eyJpdiI6ImhMYUJwRThtMWY3eFozblRibkVzQkE9PSIsInZhbHVlIjoiMUxBZzRPTXVkYU9pWXhnWjdYcGlPNlFcL0I1UWViN0QwcDlnbXNsMTE5cExqVk1KZlh0WGhKaldyYVMrVVo0XC9LMnNNODFLZjlQQmZTdFpQRUVKTklldz09IiwibWFjIjoiYTIxODNiYmVmNDc0ZjMzOTQ2YzI1MmM2ZTQ1OGIwNmE4YWVjOTQ0OTYwZjRiMThmMGFiMjc0NjNmN2FlMDQyOCJ9; laravel_session = eyJpdiI6ImxTS3dUayt1UnRNMlhlS0ZrNlVLU1E9PSIsInZhbHVlIjoiZGVWVmJcL3FIc09pQnQxdHlnSzJcL1J3UzhYTnl6WjNxY3crZ3BreXNqb09sdWY1OXlaRkE2YW1pUDhBZ2Frc2ZPMEFWNlg3MkRrTmI1MFhWXC9UOFdiWVE9PSIsIm1hYyI6Ijk2NTQ0MzkzMDExMmI2MzJmZGM0NGI4Yzk4Yzc4NzhmYTYyODIwNzFiYzA2ZDQ5NDk5ZjY3MDY0NDZmOTVkZTIifQ%3D%3D
  • 主持人:localhost
  • Referer:http://localhost/lara-mvc/public/gallery
  • User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 42.0.2311.135 Safari / 537.36 Edge / 12.10240 [...]
  • Accept-Ranges:bytes
  • Cache-Control:public
  • 连接:Keep-Alive
  • 内容 - 处理:附件;文件名= “cake.jpg”
  • 内容长度:115453
  • 内容类型:image / jpeg
  • 日期:星期一,2015年8月24日12:59:21 GMT
  • Keep-Alive:timeout = 5,max = 100
  • Last-Modified:Mon,24 Aug 2015 11:51:57 GMT
  • 服务器:Apache / 2.4.10(Win32)OpenSSL / 1.0.1i PHP / 5.6.3
  • 设置Cookie:laravel_session = eyJpdiI6InV3M2d3QWNtVXc4Z09DUUhia0tRQlE9PSIsInZhbHVlIjoiSFFDM3lpZEs2cDZUbXdQVGVPV0c5RkVISkRXcmpac2dYQ2dMVHVCT0docTU0RlRFYWV3bURDaHBQZUpIQ0NKZ3crMitFVzM4Mlo2dTBnaTVsN1ZLdXc9PSIsIm1hYyI6IjU1MTIxNTg3YWQzOWMxZDMxNmM4NzZlZjllMTNiZGRkNDQ5ZjhhOWQ2MWEyMGQwOGEwOTM1ZjYzNzliY2ZmNDMifQ%3D%3D;到期=周一,2015年8月24日14:59:22 GMT;最大年龄= 7200;路径= /;仅Http
  • 设置Cookie:XSRF-TOKEN = eyJpdiI6IkFzWmZqQm93cU55VCtTVjJjcEI1b1E9PSIsInZhbHVlIjoiT0JqVEtVNENMNTNKUllTNG9oSDBvY215VGU5eGZqMkRJQXdORDVTOGkyV1loZ3h4WkVrSGptNG5wZ0Fuc3Q1RFRUWHUza0MrUEtKS0pOaiszV3Y4Ymc9PSIsIm1hYyI6IjFlMTUyMDZlZjBjYTdiMjRlMGZmN2JmOGEyMTdiNzFlYmViZGI1ZjVhMzQyNGVlMWNiMTI0MjVkZTZhNTdlYjAifQ%3D%3D;到期=周一,2015年8月24日14:59:22 GMT;最大年龄= 7200;路径= / X-Powered-By:PHP / 5.6.3

特别是对于图像,我是否错误地设置了标题?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

在此上下文中处理图像时,您有两种选择。

<强> 1。下载图片

这意味着,将提示文件下载。在这种情况下,您应该始终设置此标头(在这种情况下,文件本身的mimetype并不重要):

Content-Type: application/octet-stream
Content-Disposition: attachment; filename="somefilename.someextension"

对于任何类型的文件都是一样的,它只是强制下载的通用方式。确保相应地设置文件名。

  

注意:这只是解释。使用download()时,Laravel将自行构建这些标头。只需确保使用此方法不包含Content-type标头。

<强> 2。显示图片

在这种情况下,图像将显示为常规图像。在这里,您应设置Content-Disposition标头,但只应设置Content-type标头:

Content-Type: image/jpeg

这应该根据图像的相应mimetype来设置。

在Laravel中:

您应该使用以下内容而不是download()方法:

$response = Response::make($file, 200)->withHeaders($headers);