檔案儲存是什麼
Laravel 提供強大的檔案系統抽象層,底層基於 PHP 套件 Flysystem。 它讓你能以相同的 API 操作本機磁碟、SFTP、Amazon S3 等各種不同的儲存後端,因此可依環境切換而不必修改程式碼。即使切換驅動,程式碼也無須改變。開發環境用本機、正式環境用 S3 這種配置能輕鬆實現。
設定
檔案系統的設定集中在config/filesystems.php。
你可以在此定義「磁碟」。磁碟是特定驅動與儲存位置的組合。
主要驅動如下:
local 驅動
使用local 驅動時,會以 filesystems 設定的 root 目錄為基準操作檔案。
預設 root 為 storage/app/private。
變更預設磁碟
透過FILESYSTEM_DISK 環境變數切換預設磁碟。
public 磁碟與符號連結
public 磁碟用來放置可從 Web 存取的檔案。
預設會存放於 storage/app/public 目錄。
要讓 Web 伺服器能存取,請建立從 public/storage 到 storage/app/public 的符號連結。
1
建立符號連結
2
取得檔案的 URL
建立符號連結後,可用
asset 輔助函式產生 URL。storage:unlink。
Storage Facade 基本操作
讀取檔案
寫入檔案
put 失敗時,預設會回傳 false。
在磁碟設定中加入 'throw' => true 可改為拋出例外。刪除檔案
檔案下載回應
URL 產生
一般 URL
local 驅動會回傳如 /storage/file.jpg 的相對 URL。
s3 驅動會回傳完整的遠端 URL。
臨時 URL(Temporary URL)
若想產生具有效期限的 URL,可使用temporaryUrl。
可用於 local 與 s3 驅動。
檔案上傳
以下是儲存使用者透過表單上傳檔案的常見流程。store 方法(自動產生檔名)
storeAs 方法(指定檔名)
指定磁碟上傳
透過 Storage Facade 上傳
檔案可見性(Visibility)
Flysystem 以visibility 管理檔案是否公開。
storePublicly。
使用多個磁碟
用disk 方法可切換操作的磁碟。
雲端儲存(S3)的設定
安裝套件
設定環境變數
在.env 檔設定 S3 認證資訊。
DigitalOcean Spaces、Cloudflare R2、Vultr Object Storage 等 S3 相容服務也可透過
s3 驅動使用。
請在 endpoint 選項指定服務的端點 URL。取得檔案 meta
目錄操作
測試
使用Storage::fake(),可撰寫不觸及真實磁碟的檔案測試。
使用
UploadedFile::fake()->image() 需要 PHP 的 GD 擴充。實戰範例:上傳個人頭像
以下整合驗證、儲存與寫回 DB 的實戰控制器範例。Storage::url() 取得 URL: