正在學習 Laeavel 的有關於圖片上傳,由於 Laravel 官方說明 對我而言仍有些不夠清楚,因此昨日在本站發了一篇[有關 storage:link 路徑設置] 請教邦友,經過許多邦友熱心提供寶貴意見,加上自己經過一連串測試練習終於有些心得,僅此,也藉本站發表分享一下心得,以慰邦友們熱心協助,也許也能提供後進初學者參考因而省些冤枉路。
本文論及之技術範圍僅限於:文件上傳之 Laravel 使用設定
/*
|這裡是說 預設存儲的 disk => 如果在.env 檔案中有設置 FILESYSTEM_DRIVER=*** 就使用 ***,若 .env 中沒有設置則使用 local ( 就是本機 disk )。
*/
'default' => env('FILESYSTEM_DRIVER', 'local'),
//使用 本機 disk 時,還可以有 2選1 目錄模式 可供任選:
'disks' => [
/*
|一、選擇使用 項目根目錄/storage... 這個是預設選項
|第一句話意思:本機存儲
|第二句話意思:上傳之檔案會存放於 項目根目錄/storage/app 這個資料夾 =>如果想要修改可以改動 ('app') 如下: ex:('/')=存在storage 目錄, ('app/photos')=存在storage/app/photos 目錄, 餘.. 類推
|默認使用 相對路徑 但也可以加上第三句話 'url' => env('APP_URL').'/storage', 意思:指定要使用 絕對路徑
*/
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
//選用本選項 必須 將 local 改成 public 像這樣'default' => env('FILESYSTEM_DRIVER', 'public'),
/*
|二、選擇使用 網站根目錄/public... 這個選項
|第一句話意思:本機存儲
|第二句話意思:上傳之檔案會存放於 項目根目錄/storage/app/public 這個資料夾 =>如果想要修改可以改動 ('app/public') 方法如上述
|第三句話意思:默認使用 絕對路徑 :域名/storage/app/public/檔案名
|第四句話意思:讓檔案變成公開,讓訪客可以讀取
*/
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
],
//這裡是關鍵:上傳的檔案都存放在 storage 目錄下,訪客是無法訪問得到的,若要提供給訪客能看得到必須執行一條命令 ,以便在 網站根目錄public 裡面產生一個 storage 的捷徑。
php artisan storage:link
/*
|這句話意思:在 public 目錄裡建立一個 storage 的捷徑 直接鏈接到檔案存放位置。
|這裡的 ('app/public') 也是可以修改的,方法也如上所述。
|甚至這個 ('storage') 也是可以修改的 ex: ('aaa') 或 ('BBB')...隨意取名字,可同時多個存在。
*/
'links' => [
public_path('storage') => storage_path('app/public'),
],
如上,說明以完結。若有初學者有興趣試試看的,可以參考以下做法:
1、打開 web.php 2、打開 welcome.blade.php 3、瀏覽器上傳圖片 4、在目錄中 檢查圖片
//1、web.php
<?php
use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;
Route::get('/', function () {
return view('welcome');
});
Route::PATCH('/upload', function (Request $request)
{
$path = $request->file->store('/');
$url = Storage::url($path);
return response()->json(['message' => 'success', 'data' => $url], 200);
});
//2、 welcome.blade.php (將 Laravel 換成 以下 的 form)
<form method="post" enctype="multipart/form-data" action="/upload">
{{ csrf_field() }}
{{ method_field('PATCH') }}
<input name="file" type="file">
<input name="upload" type="submit" value="上傳">
</form>
以上就如同野人獻曝,或有欠妥敬請前輩指教。