iT邦幫忙

1

Laravel 之有關 storage:link 路徑設置

正在學習 Laeavel 的有關於圖片上傳,由於 Laravel 官方說明 對我而言仍有些不夠清楚,因此昨日在本站發了一篇[有關 storage:link 路徑設置] 請教邦友,經過許多邦友熱心提供寶貴意見,加上自己經過一連串測試練習終於有些心得,僅此,也藉本站發表分享一下心得,以慰邦友們熱心協助,也許也能提供後進初學者參考因而省些冤枉路。

本文論及之技術範圍僅限於:文件上傳之 Laravel 使用設定

Laravel 之設定檔案=>config/filesystems.php('s3'部分省略)

/*
|這裡是說 預設存儲的 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>

以上就如同野人獻曝,或有欠妥敬請前輩指教。


尚未有邦友留言

立即登入留言