Laravel File System

1. 基本設定

config/filesystems.php

新增一個disk

'temp' => [
    'driver' => 'local',
    'root' => storage_path('temp'),
    'url' => env('APP_URL') . '/temp',
    'visibility' => 'public',
],

//在文件最下方加入 Symbolic Links
'links' => [
    public_path('temp') => storage_path('temp'),
],

storage_path() = root_path/storage/

上面的例子就是建了個disk目徑為/storage/temp

前各瀏覽的模式是 APP_URL/temp

如果是要對外公開的還需要執行

php artisan storage:link

會在 /public 中建立一個捷徑(Symbolic Links)

2. 操作

2.1上傳

$path = $request->file('avatar')->store('avatars');

2.2. storeAs 自行設定檔案保存名稱

  1. 第一個值是保存的目錄
  2. 第二個值是保存的檔案名稱
  3. 其實還有第3個值,是disk 參考第一部分, 這個值可不增,那麼就應該是storage預設位置
$path = $request->file('avator')->storeAs('/','31313.png','disk');

甚至可以動態決定名稱,比如:

$path = $request->file('avatar')->storeAs(
    'avatars', $request->user()->id
);

2.3 刪除單個文件

Storage::delete('file.jpg');

2.4 批量刪除文件

Storage::delete(['file.jpg', 'file2.jpg']);

2.6 建立子目錄

Storage::makeDirectory($directory);

實際用法

Storage::disk('disk_name')->makeDirectory($request->id);

2.6 刪除指定目錄

Storage::deleteDirectory($directory);

實際用法

Storage::disk('disk_name')->deleteDirectory($request->id);

3. 建議及提醒

3.1 操作時建議用這個模式:

Storage::disk('disk_name')->xxx();

好處1. 這樣可直接經Laravel獲取到disk的實際路徑,不用浪費時間輸入path

好處2. 不會搞錯層級,誤刪其他storage中的文件

記得use Storage

use Storage;

在需要操作Storage的php文件中,最開頭記得引入一下