文件系统/ CDN

介绍

由于Laravel和精彩的FlysystemPHP包,October提供了强大的文件系统抽象。 Flysystem集成提供了易于使用的驱动程序,可用于本地文件系统,Amazon S3和Rackspace云存储。 更好的是,在这些存储选项之间切换非常简单,因为每个系统的API保持不变。

配置

文件系统配置文件位于config/filesystems.php。 在此文件中,您可以配置所有“磁盘”。 每个磁盘代表一个特定的存储驱动程序和存储位置 配置文件中包含每个支持的驱动程序的示例配置。 因此,只需修改配置即可反映您的存储首选项和凭据。

当然,您可以根据需要配置任意数量的磁盘,甚至可能有多个使用相同驱动程序的磁盘。

本地驱动

使用local驱动程序时,请注意所有文件操作都与配置文件中定义的root目录相关。 默认情况下,此值设置为storage/app目录。 因此,以下方法将文件存储在storage/app/file.txt中:

  1. Storage::disk('local')->put('file.txt', 'Contents');

其他驱动的先决条件

在使用S3或Rackspace驱动程序之前,您需要安装Drivers plugin]

基本用法

获取磁盘实例

“Storage”facade可用于与您配置的任何磁盘进行交互。 例如,您可以在立面上使用put方法将头像存储在默认磁盘上。 如果在没有先调用disk方法的情况下调用Storagefacade上的方法,方法调用将自动传递给默认磁盘:

  1. $user = User::find($id);
  2. Storage::put(
  3. 'avatars/'.$user->id,
  4. file_get_contents(Request::file('avatar')->getRealPath())
  5. );

使用多个磁盘时,您可以使用Storagefacade上的disk方法访问特定磁盘。 当然,您可以继续链接方法来执行磁盘上的方法:

  1. $disk = Storage::disk('s3');
  2. $contents = Storage::disk('local')->get('file.jpg')

检索文件

get方法可用于检索给定文件的内容。 该方法将返回该文件的原始字符串内容:

  1. $contents = Storage::get('file.jpg');

exists方法可用于确定磁盘上是否存在给定文件:

  1. $exists = Storage::disk('s3')->exists('file.jpg');

文件元信息

size方法可用于以字节为单位获取文件的大小:

  1. $size = Storage::size('file1.jpg');

lastModified方法返回上次修改文件的UNIX时间戳:

  1. $time = Storage::lastModified('file1.jpg');

存储文件

put方法可用于在磁盘上存储文件。 您也可以将PHPresource传递给put方法,该方法将使用Flysystem的底层流支持。 在处理大文件时,强烈建议使用流:

  1. Storage::put('file.jpg', $contents);
  2. Storage::put('file.jpg', $resource);

copy方法可用于将现有文件复制到磁盘上的新位置:

  1. Storage::copy('old/file1.jpg', 'new/file1.jpg');

move方法可用于将现有文件移动到新位置:move方法可用于将现有文件移动到新位置:

  1. Storage::move('old/file1.jpg', 'new/file1.jpg');

预先添加/附加到文件

prependappend方法允许您轻松地在文件的开头或结尾插入内容:

  1. Storage::prepend('file.log', 'Prepended Text');
  2. Storage::append('file.log', 'Appended Text');

删除文件

delete方法接受从磁盘中删除的单个文件名或文件数组:

  1. Storage::delete('file.jpg');
  2. Storage::delete(['file1.jpg', 'file2.jpg']);

目录

获取目录中的所有文件

files方法返回给定目录中所有文件的数组。 如果要检索给定目录(包括所有子目录)中的所有文件的列表,可以使用allFiles方法:

  1. $files = Storage::files($directory);
  2. $files = Storage::allFiles($directory);

获取目录中的所有目录

directories方法返回给定目录中所有目录的数组。 此外,您可以使用allDirectories方法获取给定目录及其所有子目录中所有目录的列表:

  1. $directories = Storage::directories($directory);
  2. // 递归...
  3. $directories = Storage::allDirectories($directory);

创建一个目录

makeDirectory方法将创建给定目录,包括任何所需的子目录:

  1. Storage::makeDirectory($directory);

删除目录

最后,deleteDirectory可用于从磁盘中删除目录,包括其所有文件:

  1. Storage::deleteDirectory($directory);