基本會員功能除了註冊、登入、修改個人資訊之外,最常見功能應該是上傳個人圖片。(個人經驗)
Laravel的 File Storage有個「 The Public Disk」機制,讓開發者將檔案存放到 Storage路徑下的資料夾,保有安全性並提供公開連結。
本篇將逐步講解這部分。
官方文件提供 php artisan storage:link
這指令。
這句很重要,提醒storage已經連結到public資料夾的哪個位置,這樣檔案具備讀取權限。
The [/usr/local/var/wwwa/gcp/balancedDiet/public/storage] link has been connected to [/usr/local/var/wwwa/gcp/balancedDiet/storage/app/public].
The links have been created.
'disks' => [
//自訂
'publicUser' => [
'driver' => 'local',
'root' => storage_path('app/public/user'),
'url' => '/storage/user',
'visibility' => 'public',
],
//以下為預設
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
改完之後要清cache
//待確認是否一定要跑這個
//composer dump-autoload -o
php artisan config:clear
public function uploadImageAPI(Request $request)
{
$image = $request->file('photo');
$filename = $image->getClientOriginalName();
$uploadPic = Storage::disk('publicUser')->put($filename,file_get_contents($image->getRealPath()));
$photoURL = Storage::disk('publicUser')->url($filename);
return response()->json(['url'=> $photoURL],200);
Route::post('uploadAPI', 'Auth\LoginController@uploadImageAPI');
Storage::disk('publicUser')
: publicUser是上面自訂的config檔,也可以使用預設的。response給的是連結圖片內部路徑,最終的圖片網址需要加上domain。
因此在localhost開發,實際圖片網址就是:「http://127.0.0.1:8000/storage/user/cat.png」 。
建議可以用無痕視窗檢查上傳圖片的成果。
安捏就有了,有貓就給讚。
參考
https://www.larashout.com/a-complete-guide-to-laravel-storage
https://stackoverflow.com/questions/59612172/disk-videos-does-not-have-a-configured-driver
https://learnku.com/docs/laravel/7.x/filesystem/7485
https://laravel.tw/docs/5.2/filesystem
https://www.youtube.com/watch?v=6CJ73IImcAY