lundi 24 août 2015

Larevel Response::download() function image issue

I'm using Laravel 5. I am creating a photo gallery of sorts. When you click on an image I use

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

To initiate a download of the file.

Below is my code:

Route

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

When the user goes to test/example.png, it runs the getDownload function

Controller

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;

}

In this function I declare the path to my files and set up the download.

View

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

@endforeach

In my view I use a loop to get the filenames, then create a link that goes to test/$filename which invokes the method in the Controller.

The problem

Using this approach seems to work as I can download docx files, PDFs, txt files, csv files and more. However, when an image is downloaded, when I open it I get "The image cannot be displayed".

In my uploads folder I have an image named cake.JPG.

When I download this the Request headers are as follows:

  • Accept: text/html, application/xhtml+xml, image/jxr,
  • Accept-Encoding: gzip, deflate
  • Accept-Language: en-GB
  • Connection: Keep-Alive
  • Cookie: XSRF-TOKEN=eyJpdiI6ImhMYUJwRThtMWY3eFozblRibkVzQkE9PSIsInZhbHVlIjoiMUxBZzRPTXVkYU9pWXhnWjdYcGlPNlFcL0I1UWViN0QwcDlnbXNsMTE5cExqVk1KZlh0WGhKaldyYVMrVVo0XC9LMnNNODFLZjlQQmZTdFpQRUVKTklldz09IiwibWFjIjoiYTIxODNiYmVmNDc0ZjMzOTQ2YzI1MmM2ZTQ1OGIwNmE4YWVjOTQ0OTYwZjRiMThmMGFiMjc0NjNmN2FlMDQyOCJ9; laravel_session=eyJpdiI6ImxTS3dUayt1UnRNMlhlS0ZrNlVLU1E9PSIsInZhbHVlIjoiZGVWVmJcL3FIc09pQnQxdHlnSzJcL1J3UzhYTnl6WjNxY3crZ3BreXNqb09sdWY1OXlaRkE2YW1pUDhBZ2Frc2ZPMEFWNlg3MkRrTmI1MFhWXC9UOFdiWVE9PSIsIm1hYyI6Ijk2NTQ0MzkzMDExMmI2MzJmZGM0NGI4Yzk4Yzc4NzhmYTYyODIwNzFiYzA2ZDQ5NDk5ZjY3MDY0NDZmOTVkZTIifQ%3D%3D
  • Host: localhost
  • Referer: 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

The Response headers are as follows:

  • Connection: Keep-Alive
  • Cookie: XSRF-TOKEN=eyJpdiI6ImhMYUJwRThtMWY3eFozblRibkVzQkE9PSIsInZhbHVlIjoiMUxBZzRPTXVkYU9pWXhnWjdYcGlPNlFcL0I1UWViN0QwcDlnbXNsMTE5cExqVk1KZlh0WGhKaldyYVMrVVo0XC9LMnNNODFLZjlQQmZTdFpQRUVKTklldz09IiwibWFjIjoiYTIxODNiYmVmNDc0ZjMzOTQ2YzI1MmM2ZTQ1OGIwNmE4YWVjOTQ0OTYwZjRiMThmMGFiMjc0NjNmN2FlMDQyOCJ9; laravel_session=eyJpdiI6ImxTS3dUayt1UnRNMlhlS0ZrNlVLU1E9PSIsInZhbHVlIjoiZGVWVmJcL3FIc09pQnQxdHlnSzJcL1J3UzhYTnl6WjNxY3crZ3BreXNqb09sdWY1OXlaRkE2YW1pUDhBZ2Frc2ZPMEFWNlg3MkRrTmI1MFhWXC9UOFdiWVE9PSIsIm1hYyI6Ijk2NTQ0MzkzMDExMmI2MzJmZGM0NGI4Yzk4Yzc4NzhmYTYyODIwNzFiYzA2ZDQ5NDk5ZjY3MDY0NDZmOTVkZTIifQ%3D%3D
  • Host: localhost
  • Referer: 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 [...]
  • Accept-Ranges: bytes
  • Cache-Control: public
  • Connection: Keep-Alive
  • Content-Disposition: attachment; filename="cake.jpg"
  • Content-Length: 115453
  • Content-Type: image/jpeg
  • Date: Mon, 24 Aug 2015 12:59:21 GMT
  • Keep-Alive: timeout=5, max=100
  • Last-Modified: Mon, 24 Aug 2015 11:51:57 GMT
  • Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.6.3
  • Set-Cookie: laravel_session=eyJpdiI6InV3M2d3QWNtVXc4Z09DUUhia0tRQlE9PSIsInZhbHVlIjoiSFFDM3lpZEs2cDZUbXdQVGVPV0c5RkVISkRXcmpac2dYQ2dMVHVCT0docTU0RlRFYWV3bURDaHBQZUpIQ0NKZ3crMitFVzM4Mlo2dTBnaTVsN1ZLdXc9PSIsIm1hYyI6IjU1MTIxNTg3YWQzOWMxZDMxNmM4NzZlZjllMTNiZGRkNDQ5ZjhhOWQ2MWEyMGQwOGEwOTM1ZjYzNzliY2ZmNDMifQ%3D%3D; expires=Mon, 24-Aug-2015 14:59:22 GMT; Max-Age=7200; path=/; httponly
  • Set-Cookie: XSRF-TOKEN=eyJpdiI6IkFzWmZqQm93cU55VCtTVjJjcEI1b1E9PSIsInZhbHVlIjoiT0JqVEtVNENMNTNKUllTNG9oSDBvY215VGU5eGZqMkRJQXdORDVTOGkyV1loZ3h4WkVrSGptNG5wZ0Fuc3Q1RFRUWHUza0MrUEtKS0pOaiszV3Y4Ymc9PSIsIm1hYyI6IjFlMTUyMDZlZjBjYTdiMjRlMGZmN2JmOGEyMTdiNzFlYmViZGI1ZjVhMzQyNGVlMWNiMTI0MjVkZTZhNTdlYjAifQ%3D%3D; expires=Mon, 24-Aug-2015 14:59:22 GMT; Max-Age=7200; path=/ X-Powered-By: PHP/5.6.3

With images in particular have I set up the headers incorrectly?

Thank you in advance.



from Newest questions tagged laravel-5 - Stack Overflow http://ift.tt/1JO27Rl
via IFTTT

Aucun commentaire:

Enregistrer un commentaire