iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
1

基本會員功能除了註冊、登入、修改個人資訊之外,最常見功能應該是上傳個人圖片。(個人經驗)

Laravel的 File Storage有個「 The Public Disk」機制,讓開發者將檔案存放到 Storage路徑下的資料夾,保有安全性並提供公開連結。

本篇將逐步講解這部分。

初始安裝指令

官方文件提供 php artisan storage:link 這指令。
https://ithelp.ithome.com.tw/upload/images/20201006/20125263MKL3QBbb9F.png

這句很重要,提醒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.

config設定

  • 路徑在「config/filesystems.php」
  • root:內部的檔案連結路徑
  • url:外部的網址連結路徑
'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

controller

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);
  • 路徑我放在登入相關的controllere內「app/Http/Controllers/Auth/LoginController.php」,對應router。
    Route::post('uploadAPI', 'Auth\LoginController@uploadImageAPI');
    
  • Storage::disk('publicUser') : publicUser是上面自訂的config檔,也可以使用預設的。
  • filename可以自訂。
  • 建議可以將路徑存放在database中,不要把整個圖片存入資料庫內。

驗證成果

postman

  • 屬性要改file,不能是text。
    https://ithelp.ithome.com.tw/upload/images/20201006/20125263jtHzXwcWJ1.png

外部圖片連結網址

response給的是連結圖片內部路徑,最終的圖片網址需要加上domain。
因此在localhost開發,實際圖片網址就是:「http://127.0.0.1:8000/storage/user/cat.png」 。
建議可以用無痕視窗檢查上傳圖片的成果。
https://ithelp.ithome.com.tw/upload/images/20201006/20125263m8AIR0Wuhp.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


上一篇
apiDoc:API Document自動化套件
下一篇
Laraval Authentication (2):Passport
系列文
30天開發與部署 Laravel 專案30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言