Deleting files after download in laravel

You can use deleteFileAfterSend http://laravel.com/docs/5.0/responses#other-responses

return response()->download($filePath, $fileName, $headers)->deleteFileAfterSend(true);


Simply use this line of code:

return response()->download($file_path)->deleteFileAfterSend(true);

Here, inside download function the file path will be passed as an argument. Let's say for an example you want to backup your database in a file and also want to delete with downloading:

$date = Carbon::now()->format('Y-m-d_h-i');
$pub_path = public_path();
$file_path = $pub_path . '/application/db_backups/' . $date . '.sql';
$output = shell_exec('mysqldump -h58.84.34.65 -uwsit -pwsit97480 websms > ' . $file_path);
return response()->download($file_path)->deleteFileAfterSend(true);

I personally use the following;

$response = Response::make(file_get_contents($path_to_file), $status_code, $headers);

Status code is obviously the code which you want to return.

Within the $header parameter you can pass an array with the indexes Content-Type and Content-Disposition.

Then you can simply unlink $path_to_file and return $response.


Much easier way of deleting a file would be to use Jon's answer for versions of Laravel > 4.0.

You can use deleteFileAfterSend http://laravel.com/docs/5.0/responses#other-responses

return response()->download($filePath, $fileName, $headers)->deleteFileAfterSend(true);

Tags:

Php

Laravel