下载()函数图像问题


Laravel Response::download() function image issue

我使用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;
}

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

<

视图/strong>

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

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

使用这种方法似乎可以工作,因为我可以下载docx文件,pdf, txt文件,csv文件等。然而,当下载图像时,当我打开它时,我得到"该图像无法显示"。

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

当我下载这个请求头如下:

  • 接受:text/html, application/xhtml+xml, image/jxr,
  • Accept-Encoding: gzip, deflate
  • 接收语言:en -
  • 连接:维生
  • 饼干:XSRF-TOKEN = eyJpdiI6ImhMYUJwRThtMWY3eFozblRibkVzQkE9PSIsInZhbHVlIjoiMUxBZzRPTXVkYU9pWXhnWjdYcGlPNlFcL0I1UWViN0QwcDlnbXNsMTE5cExqVk1KZlh0WGhKaldyYVMrVVo0XC9LMnNNODFLZjlQQmZTdFpQRUVKTklldz09IiwibWFjIjoiYTIxODNiYmVmNDc0ZjMzOTQ2YzI1MmM2ZTQ1OGIwNmE4YWVjOTQ0OTYwZjRiMThmMGFiMjc0NjNmN2FlMDQyOCJ9;laravel_session = eyJpdiI6ImxTS3dUayt1UnRNMlhlS0ZrNlVLU1E9PSIsInZhbHVlIjoiZGVWVmJcL3FIc09pQnQxdHlnSzJcL1J3UzhYTnl6WjNxY3crZ3BreXNqb09sdWY1OXlaRkE2YW1pUDhBZ2Frc2ZPMEFWNlg3MkRrTmI1MFhWXC9UOFdiWVE9PSIsIm1hYyI6Ijk2NTQ0MzkzMDExMmI2MzJmZGM0NGI4Yzk4Yzc4NzhmYTYyODIwNzFiYzA2ZDQ5NDk5ZjY3MDY0NDZmOTVkZTIifQ % 3 d % 3 d
  • 主持人:localhost
  • 推荐人:http://localhost/lara-mvc/public/gallery
  • User-Agent: Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240

响应头如下:

  • 连接:维生
  • 饼干:XSRF-TOKEN = eyJpdiI6ImhMYUJwRThtMWY3eFozblRibkVzQkE9PSIsInZhbHVlIjoiMUxBZzRPTXVkYU9pWXhnWjdYcGlPNlFcL0I1UWViN0QwcDlnbXNsMTE5cExqVk1KZlh0WGhKaldyYVMrVVo0XC9LMnNNODFLZjlQQmZTdFpQRUVKTklldz09IiwibWFjIjoiYTIxODNiYmVmNDc0ZjMzOTQ2YzI1MmM2ZTQ1OGIwNmE4YWVjOTQ0OTYwZjRiMThmMGFiMjc0NjNmN2FlMDQyOCJ9;laravel_session = eyJpdiI6ImxTS3dUayt1UnRNMlhlS0ZrNlVLU1E9PSIsInZhbHVlIjoiZGVWVmJcL3FIc09pQnQxdHlnSzJcL1J3UzhYTnl6WjNxY3crZ3BreXNqb09sdWY1OXlaRkE2YW1pUDhBZ2Frc2ZPMEFWNlg3MkRrTmI1MFhWXC9UOFdiWVE9PSIsIm1hYyI6Ijk2NTQ0MzkzMDExMmI2MzJmZGM0NGI4Yzk4Yzc4NzhmYTYyODIwNzFiYzA2ZDQ5NDk5ZjY3MDY0NDZmOTVkZTIifQ % 3 d % 3 d
  • 主持人:localhost
  • 推荐人: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:字节/gh>
  • cache - control:公共
  • 连接:维生
  • 附加项:附件;文件名= " cake.jpg "
  • 内容长度
  • : 115453
  • 内容类型:图像/jpeg
  • 日期:星期一,24 Aug 2015 12:59:21 GMT
  • Keep-Alive: timeout=5, max=100
  • 最后修改:星期一,2015年8月24日11:51:57 GMT
  • 服务器:Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.6.3
  • set - cookie: laravel_session = eyJpdiI6InV3M2d3QWNtVXc4Z09DUUhia0tRQlE9PSIsInZhbHVlIjoiSFFDM3lpZEs2cDZUbXdQVGVPV0c5RkVISkRXcmpac2dYQ2dMVHVCT0docTU0RlRFYWV3bURDaHBQZUpIQ0NKZ3crMitFVzM4Mlo2dTBnaTVsN1ZLdXc9PSIsIm1hYyI6IjU1MTIxNTg3YWQzOWMxZDMxNmM4NzZlZjllMTNiZGRkNDQ5ZjhhOWQ2MWEyMGQwOGEwOTM1ZjYzNzliY2ZmNDMifQ % 3 d % 3 d;expires=星期一,2015年8月24日14:59:22 GMT;信息= 7200;路径=/;httponly
  • set - cookie: XSRF-TOKEN = eyJpdiI6IkFzWmZqQm93cU55VCtTVjJjcEI1b1E9PSIsInZhbHVlIjoiT0JqVEtVNENMNTNKUllTNG9oSDBvY215VGU5eGZqMkRJQXdORDVTOGkyV1loZ3h4WkVrSGptNG5wZ0Fuc3Q1RFRUWHUza0MrUEtKS0pOaiszV3Y4Ymc9PSIsIm1hYyI6IjFlMTUyMDZlZjBjYTdiMjRlMGZmN2JmOGEyMTdiNzFlYmViZGI1ZjVhMzQyNGVlMWNiMTI0MjVkZTZhNTdlYjAifQ % 3 d % 3 d;expires=星期一,2015年8月24日14:59:22 GMT;信息= 7200;路径=/X-Powered-By: PHP/5.6.3

特别是图像,我设置的标题不正确吗?

提前感谢。

在这种情况下处理图像时,您有两个选择。

1。下载图片

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

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

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

注意:这只是为了解释。当使用download()时,Laravel将自己构建这些头。只要确保在使用此方法时没有包含content类型的头文件。

2。显示图像

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

Content-Type: image/jpeg

应根据图像的相应mime类型进行设置。

在Laravel

:

您应该使用以下内容来代替download()方法:

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