Laradock 下建立 storage:link 軟連線資源無法訪問的解決辦法

天衣有縫發表於2019-11-24

最近碰到一個需求,將使用者篩選出來的資料匯出 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

Laradock下建立storage:link軟連線資源無法訪問的解決辦法

然後生成軟連線:

php artisan storage:link

Laradock下建立storage:link軟連線資源無法訪問的解決辦法

Laradock下建立storage:link軟連線資源無法訪問的解決辦法

重點來了!!!!
我直接訪問這個資源,報404錯誤:

Laradock下建立storage:link軟連線資源無法訪問的解決辦法

我訪問同在 Public 目錄下別的資料夾下的圖片是可以訪問的,但是偏偏就這個軟連線目錄下的資源無法訪問:

Laradock下建立storage:link軟連線資源無法訪問的解決辦法

如下圖所示,也就是說 /public/mahcineImg 下的資源能訪問,/public/storage 下的資源訪問不了:

Laradock下建立storage:link軟連線資源無法訪問的解決辦法


透過多方搜尋,我終於發現瞭解決辦法,但我並不明白原理是怎樣的。

關鍵點就在於我是在控制檯下直接透過命令生成的軟連線,這樣做是不行的!!!

正確做法是先要進入workspace容器:

sudo docker-compose exec workspace bash

然後在容器裡生成軟連線:

Laradock下建立storage:link軟連線資源無法訪問的解決辦法

再訪問EXCEL資源:

Laradock下建立storage:link軟連線資源無法訪問的解決辦法

下載成功!!

頭髮都抓掉一大把,看到成功下載的這一刻,桌子都差點掀掉了。


希望能幫到碰到同樣問題的你~

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章