本文重點給大家介紹Laravel實現檔案下載功能的執行個體代碼,需要的朋友參考下吧
Laravel 的上一個 LTS(長期支援)版本是 Laravel 5.1,發佈於 2015 年 6 月,按照對 LTS 版本的約定,兩年的 bug 修複支援到今年中旬就結束了,所以今年中旬必然要出一個 LTS 後繼版本,就是 Laravel 5.5。本文重點給大家介紹Laravel實現檔案下載功能的實現方法,大家參考下本文吧
download 方法可以用於產生強制讓使用者的瀏覽器下載指定路徑檔案的響應。download 方法接受檔案名稱作為方法的第二個參數,此名稱為使用者下載檔案時看見的檔案名稱。最後,你可以傳遞一個包含 HTTP 頭資訊的數組作為第三個參數傳入該方法:
return response()->download($pathToFile);return response()->download($pathToFile, $name, $headers);
以下是本人在項目裡使用的檔案下載功能。
public function downloadfile($filename) { $file = public_path().'/test.xls'; return response()->download($file,$filename.'.xls'); }
但是呢,剛開始進展不是很順利,為什麼使用laravel內建的檔案下載功能會失敗能,錯誤如下提示:
FatalErrorException in HandleCors.php line 18:Call to undefined method Symfony\Component\HttpFoundation\BinaryFileResponse::header()
大概的意思就是說,header()方法沒有被定義,經過各種摸索後找到瞭解決方案,我們可以重新定義一下header,在CorsMiddleware的handle方法中添加如下方法:
class CorsMiddleware{ public function handle($request, Closure $next) { $response = $next($request); $response->headers->set('Access-Control-Allow-Origin' , '*'); $response->headers->set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE'); $response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With, Application'); return $response; }}
最後,再重新定義完header之後,我們再使用download功能後發現能正常訪問。
總結