檔案儲存
📝 此頁面為 Laravel 官方文檔的繁體中文翻譯。查看原始英文版本
檔案儲存
簡介
Laravel 提供了強大的檔案系統抽象,感謝 Frank de Jonge 開發的優秀 Flysystem PHP 套件。Laravel 的 Flysystem 整合提供了用於處理本地檔案系統、SFTP 和 Amazon S3 的簡單驅動程式。更棒的是,由於每個系統的 API 保持不變,在本地開發機器和生產伺服器之間切換這些儲存選項非常簡單。
配置
Laravel 的檔案系統配置檔位於 config/filesystems.php。在此檔案中,您可以配置所有檔案系統「磁碟」。每個磁碟代表一個特定的儲存驅動程式和儲存位置。配置檔中包含了每個支援的驅動程式的範例配置,因此您可以修改配置以反映您的儲存偏好和憑證。
local 驅動程式用於與執行 Laravel 應用程式的伺服器上本地儲存的檔案進行互動,而 sftp 儲存驅動程式用於基於 SSH 金鑰的 FTP。s3 驅動程式用於寫入 Amazon 的 S3 雲端儲存服務。
[!NOTE] 您可以根據需要配置任意數量的磁碟,甚至可以有多個使用相同驅動程式的磁碟。
本地驅動程式
使用 local 驅動程式時,所有檔案操作都相對於 filesystems 配置檔中定義的 root 目錄。預設情況下,此值設定為 storage/app/private 目錄。因此,以下方法將寫入到 storage/app/private/example.txt:
use Illuminate\Support\Facades\Storage;
Storage::disk('local')->put('example.txt', 'Contents');
公開磁碟
應用程式 filesystems 配置檔中包含的 public 磁碟用於存放將公開存取的檔案。預設情況下,public 磁碟使用 local 驅動程式,並將其檔案儲存在 storage/app/public 中。
如果您的 public 磁碟使用 local 驅動程式,並且您希望從 Web 存取這些檔案,則應從來源目錄 storage/app/public 建立一個符號連結到目標目錄 public/storage:
要建立符號連結,您可以使用 storage:link Artisan 命令:
php artisan storage:link
一旦檔案已儲存並且已建立符號連結,您可以使用 asset 輔助函數建立指向檔案的 URL:
echo asset('storage/file.txt');
您可以在 filesystems 配置檔中配置額外的符號連結。執行 storage:link 命令時,將建立每個配置的連結:
'links' => [
public_path('storage') => storage_path('app/public'),
public_path('images') => storage_path('app/images'),
],
storage:unlink 命令可用於刪除配置的符號連結:
php artisan storage:unlink
驅動程式先決條件
S3 驅動程式配置
在使用 S3 驅動程式之前,您需要透過 Composer 套件管理器安裝 Flysystem S3 套件:
composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependencies
S3 磁碟配置陣列位於您的 config/filesystems.php 配置檔中。通常,您應使用以下環境變數來配置 S3 資訊和憑證,這些環境變數由 config/filesystems.php 配置檔引用:
AWS_ACCESS_KEY_ID=<your-key-id>
AWS_SECRET_ACCESS_KEY=<your-secret-access-key>
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=<your-bucket-name>
AWS_USE_PATH_STYLE_ENDPOINT=false
為方便起見,這些環境變數與 AWS CLI 使用的命名慣例匹配。
FTP 驅動程式配置
在使用 FTP 驅動程式之前,您需要透過 Composer 套件管理器安裝 Flysystem FTP 套件:
composer require league/flysystem-ftp "^3.0"
Laravel 的 Flysystem 整合與 FTP 配合良好;但是,框架的預設 config/filesystems.php 配置檔中不包含範例配置。如果您需要配置 FTP 檔案系統,可以使用以下配置範例:
'ftp' => [
'driver' => 'ftp',
'host' => env('FTP_HOST'),
'username' => env('FTP_USERNAME'),
'password' => env('FTP_PASSWORD'),
// Optional FTP Settings...
// 'port' => env('FTP_PORT', 21),
// 'root' => env('FTP_ROOT'),
// 'passive' => true,
// 'ssl' => true,
// 'timeout' => 30,
],
SFTP 驅動程式配置
在使用 SFTP 驅動程式之前,您需要透過 Composer 套件管理器安裝 Flysystem SFTP 套件:
composer require league/flysystem-sftp-v3 "^3.0"
Laravel 的 Flysystem 整合與 SFTP 配合良好;但是,框架的預設 config/filesystems.php 配置檔中不包含範例配置。如果您需要配置 SFTP 檔案系統,可以使用以下配置範例:
'sftp' => [
'driver' => 'sftp',
'host' => env('SFTP_HOST'),
'username' => env('SFTP_USERNAME'),
'password' => env('SFTP_PASSWORD'),
'privateKey' => env('SFTP_PRIVATE_KEY'),
'passphrase' => env('SFTP_PASSPHRASE'),
'visibility' => 'private',
'directory_visibility' => 'private',
],
範圍限定與唯讀檔案系統
範圍限定磁碟允許您定義一個所有路徑都自動添加給定路徑前綴的檔案系統。在建立範圍限定的檔案系統磁碟之前,您需要透過 Composer 套件管理器安裝一個額外的 Flysystem 套件:
composer require league/flysystem-path-prefixing "^3.0"
您可以透過定義一個使用 scoped 驅動程式的磁碟來建立任何現有檔案系統磁碟的路徑範圍限定實例。例如,您可以建立一個將現有 s3 磁碟範圍限定到特定路徑前綴的磁碟,然後使用範圍限定磁碟的每個檔案操作都將使用指定的前綴:
's3-videos' => [
'driver' => 'scoped',
'disk' => 's3',
'prefix' => 'path/to/videos',
],
「唯讀」磁碟允許您建立不允許寫入操作的檔案系統磁碟。在使用 read-only 配置選項之前,您需要透過 Composer 套件管理器安裝一個額外的 Flysystem 套件:
composer require league/flysystem-read-only "^3.0"
接下來,您可以在一個或多個磁碟的配置陣列中包含 read-only 配置選項:
's3-videos' => [
'driver' => 's3',
// ...
'read-only' => true,
],
Amazon S3 相容檔案系統
預設情況下,應用程式的 filesystems 配置檔包含一個 s3 磁碟的配置。除了使用此磁碟與 Amazon S3 互動之外,您還可以使用它與任何 S3 相容的檔案儲存服務互動,例如 RustFS、DigitalOcean Spaces、Vultr Object Storage、Cloudflare R2 或 Hetzner Cloud Storage。
通常,在更新磁碟的憑證以匹配您計劃使用的服務的憑證後,您只需更新 endpoint 配置選項的值。此選項的值通常透過 AWS_ENDPOINT 環境變數定義:
'endpoint' => env('AWS_ENDPOINT', 'https://rustfs:9000'),
取得磁碟實例
Storage facade 可用於與任何配置的磁碟進行互動。例如,您可以在 facade 上使用 put 方法將頭像儲存在預設磁碟上。如果您在呼叫 Storage facade 上的方法之前沒有先呼叫 disk 方法,則該方法將自動傳遞給預設磁碟:
use Illuminate\Support\Facades\Storage;
Storage::put('avatars/1', $content);
如果您的應用程式與多個磁碟互動,您可以使用 Storage facade 上的 disk 方法來處理特定磁碟上的檔案:
Storage::disk('s3')->put('avatars/1', $content);
按需磁碟
有時您可能希望在運行時使用給定的配置建立一個磁碟,而該配置實際上並不存在於應用程式的 filesystems 配置檔中。為此,您可以將配置陣列傳遞給 Storage facade 的 build 方法:
use Illuminate\Support\Facades\Storage;
$disk = Storage::build([
'driver' => 'local',
'root' => '/path/to/root',
]);
$disk->put('image.jpg', $content);
擷取檔案
get 方法可用於擷取檔案的內容。該方法將返回檔案的原始字串內容。請記住,所有檔案路徑都應相對於磁碟的「根」位置指定:
$contents = Storage::get('file.jpg');
如果您正在擷取的檔案包含 JSON,可以使用 json 方法擷取檔案並解碼其內容:
$orders = Storage::json('orders.json');
exists 方法可用於確定檔案是否存在於磁碟上:
if (Storage::disk('s3')->exists('file.jpg')) {
// ...
}
missing 方法可用於確定檔案是否不存在於磁碟上:
if (Storage::disk('s3')->missing('file.jpg')) {
// ...
}
下載檔案
download 方法可用於產生一個強制使用者瀏覽器下載給定路徑檔案的回應。download 方法接受一個檔案名作為方法的第二個參數,該參數將決定下載檔案的使用者所看到的檔案名。最後,您可以將 HTTP 標頭陣列作為第三個參數傳遞給該方法:
return Storage::download('file.jpg');
return Storage::download('file.jpg', $name, $headers);
檔案 URL
您可以使用 url 方法來獲取給定檔案的 URL。如果您使用 local 驅動程式,這通常只會在給定路徑前面加上 /storage 並返回檔案的相對 URL。如果您使用 s3 驅動程式,將返回完整的遠端 URL:
use Illuminate\Support\Facades\Storage;
$url = Storage::url('file.jpg');
使用 local 驅動程式時,所有應公開存取的檔案都應放置在 storage/app/public 目錄中。此外,您應在 public/storage 建立一個符號連結,指向 storage/app/public 目錄。
[!WARNING] 使用
local驅動程式時,url的返回值不會進行 URL 編碼。因此,我們建議始終使用能夠產生有效 URL 的名稱來儲存檔案。
URL 主機自訂
如果您想修改使用 Storage facade 產生的 URL 的主機,可以在磁碟的配置陣列中新增或更改 url 選項:
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
'throw' => false,
],
臨時 URL
使用 temporaryUrl 方法,您可以為使用 local 和 s3 驅動程式儲存的檔案建立臨時 URL。此方法接受一個路徑和一個指定 URL 何時過期的 DateTime 實例:
use Illuminate\Support\Facades\Storage;
$url = Storage::temporaryUrl(
'file.jpg', now()->plus(minutes: 5)
);
啟用本地臨時 URL
如果您在對 local 驅動程式引入臨時 URL 支援之前就開始開發應用程式,則可能需要啟用本地臨時 URL。為此,請在 config/filesystems.php 配置檔中將 serve 選項新增到您的 local 磁碟配置陣列中:
'local' => [
'driver' => 'local',
'root' => storage_path('app/private'),
'serve' => true,
'throw' => false,
],
S3 請求參數
如果您需要指定額外的 S3 請求參數,可以將請求參數陣列作為第三個參數傳遞給 temporaryUrl 方法:
$url = Storage::temporaryUrl(
'file.jpg',
now()->plus(minutes: 5),
[
'ResponseContentType' => 'application/octet-stream',
'ResponseContentDisposition' => 'attachment; filename=file2.jpg',
]
);
自訂臨時 URL
如果您需要自訂如何為特定儲存磁碟建立臨時 URL,可以使用 buildTemporaryUrlsUsing 方法。例如,如果您有一個允許下載檔案的控制器,而該檔案儲存在通常不支援臨時 URL 的磁碟上,這會很有用。通常,此方法應從服務提供者的 boot 方法中呼叫:
<?php
namespace App\Providers;
use DateTime;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
Storage::disk('local')->buildTemporaryUrlsUsing(
function (string $path, DateTime $expiration, array $options) {
return URL::temporarySignedRoute(
'files.download',
$expiration,
array_merge($options, ['path' => $path])
);
}
);
}
}
臨時上傳 URL
[!WARNING] 產生臨時上傳 URL 的能力僅受
s3和local驅動程式支援。
如果您需要產生一個可用於直接從客戶端應用程式上傳檔案的臨時 URL,可以使用 temporaryUploadUrl 方法。此方法接受一個路徑和一個指定 URL 何時過期的 DateTime 實例。temporaryUploadUrl 方法返回一個關聯陣列,可以解構為上傳 URL 和應與上傳請求一起包含的標頭:
use Illuminate\Support\Facades\Storage;
['url' => $url, 'headers' => $headers] = Storage::temporaryUploadUrl(
'file.jpg', now()->plus(minutes: 5)
);
此方法主要用於無伺服器環境,其中客戶端應用程式需要直接將檔案上傳到雲端儲存系統(如 Amazon S3)。
檔案元資料
除了讀取和寫入檔案之外,Laravel 還可以提供關於檔案本身的資訊。例如,size 方法可用於獲取檔案的大小(以位元組為單位):
use Illuminate\Support\Facades\Storage;
$size = Storage::size('file.jpg');
lastModified 方法返回檔案最後一次修改的 UNIX 時間戳:
$time = Storage::lastModified('file.jpg');
給定檔案的 MIME 類型可以透過 mimeType 方法獲取:
$mime = Storage::mimeType('file.jpg');
檔案路徑
您可以使用 path 方法獲取給定檔案的路徑。如果您使用 local 驅動程式,這將返回檔案的絕對路徑。如果您使用 s3 驅動程式,此方法將返回檔案在 S3 儲存桶中的相對路徑:
use Illuminate\Support\Facades\Storage;
$path = Storage::path('file.jpg');
儲存檔案
put 方法可用於將檔案內容儲存在磁碟上。您也可以將 PHP resource 傳遞給 put 方法,這將使用 Flysystem 的底層串流支援。請記住,所有檔案路徑都應相對於為磁碟配置的「根」位置指定:
use Illuminate\Support\Facades\Storage;
Storage::put('file.jpg', $contents);
Storage::put('file.jpg', $resource);
寫入失敗
如果 put 方法(或其他「寫入」操作)無法將檔案寫入磁碟,將返回 false:
if (! Storage::put('file.jpg', $contents)) {
// The file could not be written to disk...
}
如果您願意,可以在檔案系統磁碟的配置陣列中定義 throw 選項。當此選項定義為 true 時,諸如 put 之類的「寫入」方法將在寫入操作失敗時拋出 League\Flysystem\UnableToWriteFile 實例:
'public' => [
'driver' => 'local',
// ...
'throw' => true,
],
在檔案前面和後面新增內容
prepend 和 append 方法允許您在檔案的開頭或結尾寫入內容:
Storage::prepend('file.log', 'Prepended Text');
Storage::append('file.log', 'Appended Text');
複製和移動檔案
copy 方法可用於將現有檔案複製到磁碟上的新位置,而 move 方法可用於重新命名或將現有檔案移動到新位置:
Storage::copy('old/file.jpg', 'new/file.jpg');
Storage::move('old/file.jpg', 'new/file.jpg');
自動串流
將檔案串流到儲存可以顯著降低記憶體使用量。如果您希望 Laravel 自動管理將給定檔案串流到您的儲存位置,可以使用 putFile 或 putFileAs 方法。此方法接受一個 Illuminate\Http\File 或 Illuminate\Http\UploadedFile 實例,並將自動將檔案串流到您想要的位置:
use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage;
// Automatically generate a unique ID for filename...
$path = Storage::putFile('photos', new File('/path/to/photo'));
// Manually specify a filename...
$path = Storage::putFileAs('photos', new File('/path/to/photo'), 'photo.jpg');
關於 putFile 方法有幾點需要注意。請注意,我們只指定了目錄名稱,而不是檔案名。預設情況下,putFile 方法將產生一個唯一 ID 作為檔案名。檔案的副檔名將通過檢查檔案的 MIME 類型來確定。putFile 方法將返回檔案的路徑,因此您可以將包含產生的檔案名的路徑儲存在資料庫中。
putFile 和 putFileAs 方法還接受一個參數來指定儲存檔案的「可見性」。如果您將檔案儲存在 Amazon S3 等雲端磁碟上,並且希望檔案透過產生的 URL 可公開存取,這特別有用:
Storage::putFile('photos', new File('/path/to/photo'), 'public');
檔案上傳
在 Web 應用程式中,儲存檔案最常見的用例之一是儲存使用者上傳的檔案,例如照片和文件。Laravel 使使用上傳檔案實例上的 store 方法儲存上傳的檔案變得非常簡單。使用您希望儲存上傳檔案的路徑呼叫 store 方法:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserAvatarController extends Controller
{
public function update(Request $request): string
{
$path = $request->file('avatar')->store('avatars');
return $path;
}
}
關於此範例有幾點需要注意。請注意,我們只指定了目錄名稱,而不是檔案名。預設情況下,store 方法將產生一個唯一 ID 作為檔案名。檔案的副檔名將通過檢查檔案的 MIME 類型來確定。store 方法將返回檔案的路徑,因此您可以將包含產生的檔案名的路徑儲存在資料庫中。
您也可以在 Storage facade 上呼叫 putFile 方法來執行與上例相同的檔案儲存操作:
$path = Storage::putFile('avatars', $request->file('avatar'));
指定檔案名
如果您不希望自動為儲存的檔案分配檔案名,可以使用 storeAs 方法,該方法接受路徑、檔案名和(可選)磁碟作為其參數:
$path = $request->file('avatar')->storeAs(
'avatars', $request->user()->id
);
您也可以在 Storage facade 上使用 putFileAs 方法,該方法將執行與上例相同的檔案儲存操作:
$path = Storage::putFileAs(
'avatars', $request->file('avatar'), $request->user()->id
);
[!WARNING] 不可列印和無效的 unicode 字元將自動從檔案路徑中移除。因此,您可能希望在將檔案路徑傳遞給 Laravel 的檔案儲存方法之前對其進行清理。檔案路徑使用
League\Flysystem\WhitespacePathNormalizer::normalizePath方法進行標準化。
指定磁碟
預設情況下,此上傳檔案的 store 方法將使用您的預設磁碟。如果您想指定另一個磁碟,請將磁碟名稱作為第二個參數傳遞給 store 方法:
$path = $request->file('avatar')->store(
'avatars/'.$request->user()->id, 's3'
);
如果您使用 storeAs 方法,可以將磁碟名稱作為第三個參數傳遞給該方法:
$path = $request->file('avatar')->storeAs(
'avatars',
$request->user()->id,
's3'
);
其他上傳檔案資訊
如果您想獲得上傳檔案的原始名稱和副檔名,可以使用 getClientOriginalName 和 getClientOriginalExtension 方法:
$file = $request->file('avatar');
$name = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
但是,請記住,getClientOriginalName 和 getClientOriginalExtension 方法被認為是不安全的,因為檔案名和副檔名可能被惡意使用者篡改。因此,您通常應優先使用 hashName 和 extension 方法來獲取給定上傳檔案的名稱和副檔名:
$file = $request->file('avatar');
$name = $file->hashName();
$extension = $file->extension();
檔案可見性
在 Laravel 的 Flysystem 整合中,「可見性」是跨多個平台的檔案權限抽象。檔案可以宣告為 public 或 private。當檔案被宣告為 public 時,表示該檔案通常應可被其他人存取。例如,使用 S3 驅動程式時,您可以檢索 public 檔案的 URL。
您可以透過 put 方法在寫入檔案時設定可見性:
use Illuminate\Support\Facades\Storage;
Storage::put('file.jpg', $contents, 'public');
如果檔案已儲存,可以透過 getVisibility 和 setVisibility 方法檢索和設定其可見性:
$visibility = Storage::getVisibility('file.jpg');
Storage::setVisibility('file.jpg', 'public');
處理上傳的檔案時,您可以使用 storePublicly 和 storePubliclyAs 方法以 public 可見性儲存上傳的檔案:
$path = $request->file('avatar')->storePublicly('avatars', 's3');
$path = $request->file('avatar')->storePubliclyAs(
'avatars',
$request->user()->id,
's3'
);
本地檔案與可見性
使用 local 驅動程式時,public 可見性轉換為目錄的 0755 權限和檔案的 0644 權限。您可以在應用程式的 filesystems 配置檔中修改權限映射:
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'permissions' => [
'file' => [
'public' => 0644,
'private' => 0600,
],
'dir' => [
'public' => 0755,
'private' => 0700,
],
],
'throw' => false,
],
刪除檔案
delete 方法接受單個檔案名或要刪除的檔案陣列:
use Illuminate\Support\Facades\Storage;
Storage::delete('file.jpg');
Storage::delete(['file.jpg', 'file2.jpg']);
如有必要,您可以指定應從哪個磁碟刪除檔案:
use Illuminate\Support\Facades\Storage;
Storage::disk('s3')->delete('path/file.jpg');
目錄
獲取目錄中的所有檔案
files 方法返回給定目錄中所有檔案的陣列。如果您想檢索給定目錄中包括子目錄在內的所有檔案的列表,可以使用 allFiles 方法:
use Illuminate\Support\Facades\Storage;
$files = Storage::files($directory);
$files = Storage::allFiles($directory);
獲取目錄中的所有子目錄
directories 方法返回給定目錄中所有子目錄的陣列。如果您想檢索給定目錄中包括子目錄在內的所有目錄的列表,可以使用 allDirectories 方法:
$directories = Storage::directories($directory);
$directories = Storage::allDirectories($directory);
建立目錄
makeDirectory 方法將建立給定的目錄,包括任何需要的子目錄:
Storage::makeDirectory($directory);
刪除目錄
最後,deleteDirectory 方法可用於移除目錄及其所有檔案:
Storage::deleteDirectory($directory);
測試
Storage facade 的 fake 方法允許您輕鬆建立一個虛擬磁碟,結合 Illuminate\Http\UploadedFile 類別的檔案產生工具,大大簡化了檔案上傳的測試。例如:
<?php
namespace Tests\Feature;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function test_albums_can_be_uploaded(): void
{
Storage::fake('photos');
$response = $this->json('POST', '/photos', [
UploadedFile::fake()->image('photo1.jpg'),
UploadedFile::fake()->image('photo2.jpg')
]);
Storage::disk('photos')->assertExists('photo1.jpg');
Storage::disk('photos')->assertExists(['photo1.jpg', 'photo2.jpg']);
Storage::disk('photos')->assertMissing('missing.jpg');
Storage::disk('photos')->assertMissing(['missing.jpg', 'non-existing.jpg']);
Storage::disk('photos')->assertCount('/wallpapers', 2);
Storage::disk('photos')->assertDirectoryEmpty('/wallpapers');
}
}
預設情況下,fake 方法將刪除其臨時目錄中的所有檔案。如果您希望保留這些檔案,可以使用 persistentFake 方法代替。有關測試檔案上傳的更多資訊,您可以查閱 HTTP 測試文件中有關檔案上傳的資訊。
[!WARNING]
image方法需要 GD 擴充功能。
自訂檔案系統
Laravel 的 Flysystem 整合提供了對幾個「驅動程式」的開箱即用支援;但是,Flysystem 不僅限於這些,還有許多其他儲存系統的適配器。如果您想在 Laravel 應用程式中使用這些額外適配器之一,可以建立一個自訂驅動程式。
為了定義自訂檔案系統,您需要一個 Flysystem 適配器。讓我們將一個社群維護的 Dropbox 適配器新增到我們的專案中:
composer require spatie/flysystem-dropbox
接下來,您可以在應用程式的其中一個服務提供者的 boot 方法中註冊驅動程式。為此,您應使用 Storage facade 的 extend 方法:
<?php
namespace App\Providers;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Filesystem\FilesystemAdapter;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\ServiceProvider;
use League\Flysystem\Filesystem;
use Spatie\Dropbox\Client as DropboxClient;
use Spatie\FlysystemDropbox\DropboxAdapter;
class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
// ...
}
public function boot(): void
{
Storage::extend('dropbox', function (Application $app, array $config) {
$adapter = new DropboxAdapter(new DropboxClient(
$config['authorization_token']
));
return new FilesystemAdapter(
new Filesystem($adapter, $config),
$adapter,
$config
);
});
}
}
extend 方法的第一個參數是驅動程式的名稱,第二個參數是一個接收 $app 和 $config 變數的閉包。該閉包必須返回一個 Illuminate\Filesystem\FilesystemAdapter 實例。$config 變數包含在 config/filesystems.php 中為指定磁碟定義的值。
一旦您建立並註冊了擴充功能的服務提供者,就可以在 config/filesystems.php 配置檔中使用 dropbox 驅動程式。