[ Laravel 5.2 文檔 ] 服務 -- 檔案系統/雲端儲存

來源:互聯網
上載者:User

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驅動了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.