最近碰到一個需求,將使用者篩選出來的資料匯出 EXCEL ,儲存檔案在伺服器上然後返回給前端一個下載的 URL 。
我用的是 Laravel-excel:
use App\Exports\DataExport;
.
.
.
public function suggestExport()
{
$this->_repository->setModel(new SuggestModel);
//獲取到要匯出的資料
$result = $this->_repository->suggestExport();
//設定EXCEL表頭,trans()用於處理多語言文字
$headings = [
trans('mes.機床產線組'),
trans('mes.裝置名稱'),
trans('mes.姓名'),
trans('mes.反饋型別'),
trans('mes.反饋內容'),
trans('mes.反饋時間'),
];
//檔名
$name = date('YmdHis').'.xlsx';
//匯出到/public/excel資料夾下
(new DataExport($result, $headings))->store('/public/excel/'.$name);
return $name;
然後在 /storage/app/public/excel/ 下生成了一個EXCEL 檔案:20191124075909.xlsx
然後生成軟連線:
php artisan storage:link
重點來了!!!!
我直接訪問這個資源,報404錯誤:
我訪問同在 Public 目錄下別的資料夾下的圖片是可以訪問的,但是偏偏就這個軟連線目錄下的資源無法訪問:
如下圖所示,也就是說 /public/mahcineImg 下的資源能訪問,/public/storage 下的資源訪問不了:
透過多方搜尋,我終於發現瞭解決辦法,但我並不明白原理是怎樣的。
關鍵點就在於我是在控制檯下直接透過命令生成的軟連線,這樣做是不行的!!!
正確做法是先要進入workspace容器:
sudo docker-compose exec workspace bash
然後在容器裡生成軟連線:
再訪問EXCEL資源:
下載成功!!
頭髮都抓掉一大把,看到成功下載的這一刻,桌子都差點掀掉了。
希望能幫到碰到同樣問題的你~
本作品採用《CC 協議》,轉載必須註明作者和本文連結