文件系统/CDN
Introduction
感谢 Laravel 和精彩的 Winter 提供了一个强大的文件系统抽象Flysystem PHP包。 Flysystem 集成提供了简单易用的驱动程序,用于处理本地文件系统、Amazon S3 和 Rackspace 云存储。更好的是,在这些存储选项之间切换非常简单,因为每个系统的 API 保持不变。
Configuration
文件系统配置文件位于config/filesystems.php
.在此文件中,您可以配置所有“磁盘”。每个磁盘代表一个特定的存储驱动程序和存储位置。配置文件中包含每个支持的驱动程序的示例配置。因此,只需修改配置以反映您的存储首选项和凭据。
当然,您可以配置任意数量的磁盘,甚至可以有多个使用相同驱动程序的磁盘。
当地司机
当使用local
驱动程序,注意所有的文件操作都是相对于root
配置文件中定义的目录。默认情况下,此值设置为storage/app
目录。因此,以下方法将文件存储在storage/app/file.txt
:
Storage::disk('local')->put('file.txt', 'Contents');
其他驱动程序先决条件
在使用 S3 或 Rackspace 驱动程序之前,您需要安装驱动插件.
基本用法
获取磁盘实例
这Storage
facade 可用于与您配置的任何磁盘进行交互。例如,您可以使用put
facade 上的方法将头像存储在默认磁盘上。如果你调用方法Storage
Facade 没有先调用disk
方法,方法调用将自动传递到默认磁盘:
$user = User::find($id);
Storage::put(
'avatars/'.$user->id,
file_get_contents(Request::file('avatar')->getRealPath())
);
使用多个磁盘时,您可以使用disk
上的方法Storage
正面。当然,你可以继续链式方法在磁盘上执行方法:
$disk = Storage::disk('s3');
$contents = Storage::disk('local')->get('file.jpg')
检索文件
这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');
存储文件
这put
方法可用于将文件存储在磁盘上。您也可以通过 PHPresource
到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');
删除文件
这delete
方法接受要从磁盘中删除的单个文件名或文件数组:
Storage::delete('file.jpg');
Storage::delete(['file1.jpg', 'file2.jpg']);
Directories
获取目录下的所有文件
这files
方法返回给定目录中所有文件的数组。如果您想检索给定目录中所有文件的列表,包括所有子目录,您可以使用allFiles
方法:
$files = Storage::files($directory);
$files = Storage::allFiles($directory);
获取目录中的所有目录
这directories
方法返回给定目录中所有目录的数组。此外,您可以使用allDirectories
获取给定目录及其所有子目录中所有目录列表的方法:
$directories = Storage::directories($directory);
// Recursive...
$directories = Storage::allDirectories($directory);
创建目录
这makeDirectory
方法将创建给定的目录,包括任何需要的子目录:
Storage::makeDirectory($directory);
删除目录
最后,deleteDirectory
可用于从磁盘中删除目录,包括其所有文件:
Storage::deleteDirectory($directory);