X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/745d15d200dc9df5761eb77616575bc15eefb537..refs/pull/2791/head:/app/Http/Controllers/Controller.php diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 034dfa524..47b03b28d 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -6,6 +6,7 @@ use BookStack\Facades\Activity; use BookStack\Interfaces\Loggable; use BookStack\HasCreatorAndUpdater; use BookStack\Model; +use finfo; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Http\Exceptions\HttpResponseException; @@ -121,6 +122,20 @@ abstract class Controller extends BaseController ]); } + /** + * Create a file download response that provides the file with a content-type + * correct for the file, in a way so the browser can show the content in browser. + */ + protected function inlineDownloadResponse(string $content, string $fileName): Response + { + $finfo = new finfo(FILEINFO_MIME_TYPE); + $mime = $finfo->buffer($content) ?: 'application/octet-stream'; + return response()->make($content, 200, [ + 'Content-Type' => $mime, + 'Content-Disposition' => 'inline; filename="' . $fileName . '"' + ]); + } + /** * Show a positive, successful notification to the user on next view load. */