如題:請教大大!熱心協助感謝在先
如何同時顯示我的圖片 ( 如下圖:包含 內部圖片=找不到 與外部圖片=正常 )
資料庫如下:
檔案結構如下: (已經執行過 php artisan storage:link)
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'),
],
];
請前輩指教一下
樓上的咖冰拉大大已經點出問題
你參考下面教學的程式碼,修改一下路徑的處理方式
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 筆資料 :
a、 posts/post1.jpg
// 這張圖片存在 public/storage/posts/目錄裡面
b、https://lorempixel.com/640/480/?99254
// 這張圖是有完整路徑的 外部圖片
我的 index.blade.php 裡面
如果
src="{{ Url($post->image) }}"
則找不到 a 圖片
如果
src="{{ Url('storage/'.$post->image) }}"
則找不到 b 圖片
所以你可以用 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 裡面直接設置? 如何設置?
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管到外部網址的圖片...?
資料庫圖片位置不能改嗎?
不是這個意思, 我是說:從 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 就能得到圖片
@咖冰拉 可以改的
我只要是想學 如何設置?
看來 我自己設立題目時 有點不太精確 ,歹勢啦!
所以你真正需要問的
其實是怎麼將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()抓到圖片
好處是,完全不用動參數檔
經過仔細研讀前輩提供資訊,再加上一連串練習測試,我終於能懂了,再次衷心感謝 前輩大大的指導,謝謝啦!
我發表了一片心得
也請前輩們順路看看,是否不負教悔。