iT邦幫忙

0

有關 storage:link 路徑設置

如題:請教大大!熱心協助感謝在先

如何同時顯示我的圖片 ( 如下圖:包含 內部圖片=找不到 與外部圖片=正常 )

https://ithelp.ithome.com.tw/upload/images/20200508/20121754rZn3jT0Ww7.png

資料庫如下:
https://ithelp.ithome.com.tw/upload/images/20200508/20121754pw4BKVby49.png

檔案結構如下: (已經執行過 php artisan storage:link)
https://ithelp.ithome.com.tw/upload/images/20200508/20121754WQHJ3IfDdE.png

view 之 index.blade.php 片段如下:

@foreach($posts as $post)
        <div class="card" style="width: 100%; margin-bottom: 25px">
            <img src="{{ Url($post->image) }}" class="card-img-top" alt="...">

            <div class="card-body">
                <h5 class="card-title">{{ $post->title }}</h5>
                <p class="card-text">{{ $post->excerpt }}</p>
                <a href="{{ route('posts.show', $post->id) }}" class="btn btn-primary float-right">文章詳情</a>
            </div>
        </div>
        @endforeach

filesystems.php 如下:(.env 沒有設置 )

<?php

return [

    'default' => env('FILESYSTEM_DRIVER', 'local'),

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public/'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],
    ],
    
    'links' => [
        public_path('storage') => storage_path('app/public'),
    ],
];

請前輩指教一下

看更多先前的討論...收起先前的討論...
咖咖拉 iT邦研究生 2 級 ‧ 2020-05-08 10:27:18 檢舉
你有發現URL的"\" 是不同邊嗎XD
真的耶!現在 才看到 ,
但是這個部分 要從哪裡改啊! 那是上傳圖片之後自動產生的耶!
我換了一張圖片沒有 '\' 的也一樣
咖咖拉 iT邦研究生 2 級 ‧ 2020-05-08 11:00:20 檢舉
自刪
對 這是問題所在, 我如果這樣 src="{{ Url('storage/'.$post->image) }}"
就找得到了,但是 換 外部的找不到 (如下方)

1 個回答

1
通靈亡
iT邦研究生 1 級 ‧ 2020-05-08 10:39:17
最佳解答

樓上的咖冰拉大大已經點出問題
你參考下面教學的程式碼,修改一下路徑的處理方式

https://www.larashout.com/a-complete-guide-to-laravel-storage

// Save the file
$path = $file->storeAs('files', $fileName);

After uploading a new file, you will get something like the following output:
"files/profile-1564586486.jpg"

看更多先前的回應...收起先前的回應...

好的 我參考一下先

大大的連結中的說明 與 官方說明 ,說的一樣,但似乎沒有說明到我的點。

我的癥結點 在於自料庫中已經存在 2 筆資料 :

我的 index.blade.php 裡面
如果

src="{{ Url($post->image) }}"

則找不到 a 圖片
如果

src="{{ Url('storage/'.$post->image) }}"

則找不到 b 圖片

通靈亡 iT邦研究生 1 級 ‧ 2020-05-08 11:12:00 檢舉

所以你可以用 Storage::exists($post->image) 檢查圖片是否存在Storage
如果存在,抓Storage::url($post->image)
不存在,抓Url($post->image)

三元運算子:

Storage::exists($post->image) ? Storage::url($post->image) : Url($post->image) 

好的 我試試看

除此之外!能不能在 config/filesystems.php 裡面直接設置? 如何設置?

通靈亡 iT邦研究生 1 級 ‧ 2020-05-08 11:48:33 檢舉

The filesystem configuration file is located at config/filesystems.php. Within this file you may configure all of your "disks". Each disk represents a particular storage driver and storage location.

一個是放在Storage,一個是放在外部網址
你要Storage管到外部網址的圖片...?

咖咖拉 iT邦研究生 2 級 ‧ 2020-05-08 11:53:41 檢舉

資料庫圖片位置不能改嗎?

不是這個意思, 我是說:從 config/filesystems.php

'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public/'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],
        
        //或是 
        
'links' => [
        public_path('storage') => storage_path('app/public'),
    ],

這裡能不能設置成

src="{{ Url($post->image) }}"

產生的 url:http://***/posts/post1.jpg 就能得到圖片

@咖冰拉 可以改的
我只要是想學 如何設置?

看來 我自己設立題目時 有點不太精確 ,歹勢啦!

通靈亡 iT邦研究生 1 級 ‧ 2020-05-08 12:29:42 檢舉

所以你真正需要問的
其實是怎麼將Storage預設的上傳路徑設定成Public Path的目路底下?

https://stackoverflow.com/questions/42562203/save-image-in-public-folder-instead-storage-laravel-5

'root'   => public_path(),
'url' => env('APP_URL').'/public',

你還有一個解法:
當你上傳圖片完之後,在資料庫裡面存Storage::url()處理過的路徑
這樣你在.blade.php就可以用Url()抓到圖片
好處是,完全不用動參數檔

經過仔細研讀前輩提供資訊,再加上一連串練習測試,我終於能懂了,再次衷心感謝 前輩大大的指導,謝謝啦!

我發表了一片心得
也請前輩們順路看看,是否不負教悔。

我要發表回答

立即登入回答