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.