1、簡介
Laravel 基於 Frank de Jonge 開發的 PHP 包 Flysystem提供了強大的檔案系統抽象。Laravel檔案系統整合提供了使用驅動處理本地檔案系統的簡單使用,這些驅動包括Amazon S3,以及Rackspace 雲端儲存。此外在這些儲存選項間切換非常簡單,因為對每個系統而言,API 是一樣的。
2、配置
檔案系統設定檔位於 config/filesystems.php。在該檔案中可以配置所有”硬碟“,每個硬碟描述了特定的儲存驅動和儲存位置。為每種支援的驅動的樣本配置包含在該設定檔中,所以,簡單編輯該配置來反映你的儲存參數和認證資訊。
當然,你想配置磁碟多少就配置多少,多個磁碟也可以共用同一個驅動。
本地驅動
使用 local驅動的時候,注意所有檔案操作相對於定義在設定檔中的 root目錄,預設情況下,該值設定為 storage/app目錄,因此,下面的方法將會隱藏檔到 storage/app/file.txt:
Storage::disk('local')->put('file.txt', 'Contents');
其它驅動預備知識
在使用Amazon S3或Rackspace驅動之前,需要通過Composer安裝相應的包:
- Amazon S3: league/flysystem-aws-s3-v3 ~1.0
- Rackspace: league/flysystem-rackspace ~1.0
3、基本使用
3.1 擷取硬碟執行個體
Storage門面用於和你配置的所有磁碟進行互動,例如,你可以使用該門面上的put方法來儲存頭像到預設磁碟,如果你調用 Storage門面上的方法卻先調用 disk方法,該方法調用自動傳遞到預設磁碟:
id, file_get_contents($request->file('avatar')->getRealPath()) ); }}
使用多個磁碟時,可以使用 Storage門面上的 disk方法訪問特定磁碟。當然,可以繼續使用方法鏈執行該磁碟上的方法:
$disk = Storage::disk('s3');$contents = Storage::disk('local')->get('file.jpg')
3.2 擷取檔案
get方法用於擷取給定檔案的內容,該方法將會返回該檔案的原生字串內容:
$contents = Storage::get('file.jpg');
exists方法用於判斷給定檔案是否存在於磁碟上:
$exists = Storage::disk('s3')->exists('file.jpg');
檔案元資訊
size方法以位元組方式返迴文件大小:
$size = Storage::size('file1.jpg');
lastModified方法以UNIX時間戳記格式返迴文件最後一次修改時間:
$time = Storage::lastModified('file1.jpg');
3.3 隱藏檔
put方法用於隱藏檔到磁碟。可以傳遞一個PHP資源到 put方法,該方法將會使用Flysystem底層的流支援。在處理大檔案的時候推薦使用檔案流:
Storage::put('file.jpg', $contents);Storage::put('file.jpg', $resource);
copy方法將磁碟中已存在的檔案從一個地方拷貝到另一個地方:
Storage::copy('old/file1.jpg', 'new/file1.jpg');
move方法將磁碟中已存在的檔案從一定地方移到到另一個地方:
Storage::move('old/file1.jpg', 'new/file1.jpg');
新增內容到檔案開頭/結尾
prepend和 append方法允許你輕鬆插入內容到檔案開頭/結尾:
Storage::prepend('file.log', 'Prepended Text');Storage::append('file.log', 'Appended Text');
3.4 刪除檔案
delete方法接收單個檔案名稱或多個檔案數組並將其從磁碟移除:
Storage::delete('file.jpg');Storage::delete(['file1.jpg', 'file2.jpg']);
3.5 目錄
擷取一個目錄下的所有檔案
files方法返回給定目錄下的所有檔案數組,如果你想要擷取給定目錄下包含子目錄的所有檔案清單,可以使用 allFiles方法:
$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);
4、自訂檔案系統
Laravel 的 Flysystem 整合支援自訂驅動,為了設定自訂的檔案系統你需要建立一個服務提供者如 DropboxServiceProvider。在該提供者的 boot方法中,你可以使用 Storage門面的 extend方法定義自訂驅動:
extend方法的第一個參數是驅動名稱,第二個參數是擷取 $app和 $config變數的閉包。該解析器閉包必須返回一個 League\Flysystem\Filesystem執行個體。$config變數包含了定義在設定檔 config/filesystems.php中為特定磁碟定義的選項。
建立好註冊擴充的服務提供者後,就可以使用設定檔 config/filesystem.php中的 dropbox驅動了。