PHPlaravel 基础教程 —— 文件系统

找寻文件

get
方法可以用来从所给定的文本中搜索出其内容。该方法会重返文件的原始字符串内容:

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

exists 方法能够用来判断所给定的文本是不是存在于磁盘中:

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

收获磁盘实例

Storage 假面可以用来和您所安插的磁盘举行互动。比如,你可以行使它的
put
方法来将用户的头像图片存储到暗中认同的磁盘。如果您在调用该办法的时候没有在其事先使用
disk 方法的话,那么该方法会自动的将头像传递到暗中同意的磁盘:

<?php

namespace App\Http\Controllers;

use Storage;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
  /**
   * Update teh avatar for the given user.
   *
   * @param Request $request
   * @param int $id
   * @return Response
   */
   public function updateAvatar(Request $request, $id)
   {
     $user = User::findOrFail($id);

     Storage::put(
        'avatars/'.$user->id,
        file_get_contents($request->file('avatar')->getRealPath())
      );
   }
}

当你选用八个磁盘时,你可以应用 Storage 假面的 disk
方法来指定访问的磁盘。当然,你可以运用链式的方法来进展持续的操作:

$disk = Storage::disk('s3');

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

配置

文件系统的配置选项存储在 config/filesystems.php
文件中。在这么些文件中你可以对富有的磁盘举办配置。逐个磁盘选项包蕴着其所使用的仓储驱动及其存储地方。对于
laravel
暗许协理的存储驱动,在这几个文件中都有相应的布署示范。所以,你可以大致的在那个文件中修改配置选项就足以采取其精锐的功用。

理所当然,你可以安插八个磁盘,甚至可以使多少个磁盘使用同一的驱动。

公家磁盘

public 磁盘意味着其得以被公开的访问。专断认同的 public 磁盘使用的是
local 驱动并且其储存的文书地点是在 storage/app/public
目录。如若你想要那些目录下的文书可以在 web 中开展访问,你须要成立一个
public/storagestorage/app/public
的号子链接。那些约定可以使公开访问的文本保持存放在同一个索引中还要可以在运用像
Envoyer
那种无痛持续陈设系统时得以便宜的共享整个计划进度。

本来,一旦文件被贮存并且创立了标记链接。你就足以通过 asset
辅助方法来变化文书的 U奔驰G级L:

echo asset('storage/file.txt')

当地驱动

当使用 local
驱动时,你须求掌握的是有所的公文操作都是对峙于配置文件中的 root
选项所定义的目录。暗许的那一个值设置的是 storage/app
目录。因而,下边的措施将文件存储到 storage/app/file.txt:

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

任何驱动先决条件

在选用 S3 恐怕 Rackspace 驱动以前,你需求先通过 Composer
来安装适当的包文件:

  • Amazon S3: league/flysystem-aws-s3-v3 ~1.0
  • Rackspace: league/flysystem-rackspace ~1.0

FTP 驱动配置

laravel 的文件系统可以很好的帮忙 FTP
的合龙,不过在默许的配置文件中并没有给出示例。假如你须求配备 FTP
的文件系统,你能够应用下边的安顿示范:

'ftp' => [
  'dirver' => 'ftp',
  'host' => 'ftp.example.com',
  'username' => 'your-username',
  'password' => 'your-password',

  // Optional FTP Settings...
  // 'port' => 21,
  // 'root' => '',
  // 'passive' => true,
  // 'ssl' => true,
  // 'timeout' => 30,
],

Rackspace 驱动配置

laravel 的文件系统能够很好的支撑 Rackspace
的合一,但是在私行认同的计划文件中并没有给出示例。假如您要求配备 Rackspace
文件系统,你可以利用上面的言传身教:

'rackspace' => [
  'driver' => 'rackspace',
  'username' => 'your-username',
  'key' => 'your-key',
  'container' => 'your-container',
  'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',
  'region' => 'IAD',
  'url_type' => 'publicURL',
],

文件系统/云存储

基础用法

自定义文件系统

laravel
的文件系统对三种普遍的蕴藏系统提供了开箱即用的支撑。事实上,文件系统并不曾限定你只行使所提供的那个。你可以自身创立一个适配器来创设一个自定义的驱动去匡助你所梦想利用的文书存储系统。

你须求创立一个劳动提供者来举行自定义文件存储系统的打造。比如
DropboxServiceProvider。在提供者的 boot 方法中,你须要接纳 Storage
假面的 extendPHP, 方法来定义你协调的驱动:

<?php

namespace App\Providers;

use Storage;
use League\Flysystem\Filesystem;
use Dropbox\Client as DropboxClient;
use Illuminate\Support\ServiceProvider;
use League\Flysystem\Dropbox\DropboxAdapter;

class DropboxServiceProvider extends ServiceProvider
{
  /**
   * Perform post-registration booting of services.
   *
   * @return void
   */
   public function boot()
   {
     Storage::extend('dropbox', function ($app, $config) {
       $client = new DropboxClient(
        $config['accessToken'], $config['clientIdentifier']
       );      

       return new Filesystem(new DropboxAdapter($client));
     });
   }

   /**
    * Register bindings in the container.
    *
    * @return void
    */
    public function register()
    {
      //
    }
}

extend
方法中的第四个参数应该是驱动的名号,第四个参数是一个闭包,闭包接受
$app$config 变量。被分析的闭包必须回到一个
League\Flysystem\Filesystem 的实例。$config 变量包涵了
config/filesystems.php 文件中指定磁盘的值。

若是你创立了劳务提供者并且注册了这一个增加,你就可以在
config/filesystem.php 配置文件中动用 dropbox 驱动了。

文件 URLs

当使用 local 或者 s3 驱动时,你可以应用 url 方法来赢得给定文件的
U昂科威L。假如你利用的是 local 驱动,那它只会不难的在给定的不二法门前增添
/storage 前缀以回到相对的文本路径。若是您接纳的是 s3
驱动,将会回来完整的远端 RUL:

$url = Storage::url('file1.jpg');

只顾:当使用的是 local 驱动时,一定要保证制造了 public/storage
storage/app/public 的符号链接。

文件元新闻

size 方法可以用来得到给定文件的字节大小:

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

lastModified 方法会重回给定文件的结尾修改时间,它选取的 是 UNIX
时间戳:

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

简介

laravel 提供了一个强硬的文件系统的架空,那得益于 Frank de Jonge 所支付的
Flyststem
PHP 包。laravel
的文件系统提供了对有些仓储驱动的支撑,它们包罗地面文件系统,亚马逊S3,Rackspace
云存储。更为奇妙的是,它可以经过存储配置选项来切换那几个囤积系统,因为
laravel 对它们提供了联合的 API 接口。

去除文件

delete
方法能够承受一个文书名恐怕文件名所构成的数组,它将从磁盘中剔除相应的文书:

Storage::delete('file.jpg');

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

文件可知性

你可以通过使用 getVisibilitysetVisibility
方法来开展文件可知性的搜寻和安装。可知性是跨平台的公文权限的肤浅:

Storage::getVisibility('file.jpg');

Storage::setVisibility('file.jpg', 'public');

其余,你可以在接纳 put 方法的还要设置文件的可知性。有效的可知性值是
publicprivate:

Storage::put('file.jpg', $contents, 'public');

目录

从目录中赢得具有文件

files
方法会重回所给定目录中持有的文件所构成的数组。要是您想要在探寻到的文本中含有所给定目录的子目录。那么您需要选拔
allFiles 方法:

$file = 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);

积存文件

put 方法可以用来将文件存储到磁盘。你可以传递一个 PHP 的 resource
put
方法,那么它会利用文件系统的尾部流协理。在与大型文件交互时,推荐应用文件流:

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');

松开或追加内容到文件

prependappend 方法允许你轻轻松松的往文件的前奏或停止地点加入内容:

Storage::prepend('file.log', 'Prepended Text');

Storage::append('file.log', 'Appended Text');

相关文章