Может войдёшь?
Черновики Написать статью Профиль

Файловая система

перевод документация 5.х

  1. 1. Введение
  2. 2. Настройка
  3. 3. Основы использования
    1. 3.1. Получение экземпляров дисков
    2. 3.2. Чтение файлов
    3. 3.3. Запись файлов
    4. 3.4. Удаление файлов
    5. 3.5. Папки
  4. 4. Пользовательские файловые системы
Этот перевод актуален для англоязычной документации на (ветка 5.1) и (ветка 5.0). Опечатка? Выдели и нажми Ctrl+Enter.

Введение

Laravel предоставляет мощную абстракцию для работы с файловой системой благодаря восхитительному PHP-пакету Flysystem от Франка де Жонге. Laravel Flysystem содержит простые в использовании драйвера для работы с локальными файловыми системами, Amazon S3 и Rackspace Cloud Storage. Более того, можно очень просто переключаться между этими вариантами хранения файлов, поскольку у всех одинаковый API.

Настройка

Настройки файловой системы находятся в файле config/filesystems.php. В нём вы можете настроить все свои «disks». Каждый диск представляет определенный драйвер и место хранения. В конфигурационном файле имеются примеры для каждого поддерживаемого драйвера. Поэтому вы можете просто немного изменить конфигурацию под ваши нужды!

Конечно, вы можете сконфигурировать столько дисков, сколько вам будет угодно, и даже можете иметь несколько дисков, которые используют один драйвер.

Драйвер local

При использовании драйвера local обратите внимание на то, что все файловые операции выполняются относительно каталога root, определенного в вашем конфигурационном файле. По умолчанию это каталог storage/app. Поэтому следующий метод сохранит файл в storage/app/file.txt:

PHP
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

Основы использования

Получение экземпляров дисков

Для взаимодействия с любым из ваших сконфигурированных дисков можно использовать фасад Storage. Например, вы можете использовать метод этого фасада PHPput(), чтобы сохранить аватар на диск по умолчанию. Если вы вызовите метод фасада Storage без предварительного вызова метода PHPdisk(), то вызов метода будет автоматически передан диску по умолчанию:

PHP
<?php

namespace App\Http\Controllers;

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

class 
UserController extends Controller
{
  
/**
   * Обновить аватар данного пользователя.
   *
   * @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())
    );
  }
}

При использовании нескольких дисков вы можете обращаться к нужному диску с помощью метода PHPdisk() фасада Storage. Само собой, в данном случае вы тоже можете использовать сцепку методов, для выполнения методов с указанным диском:

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

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

Чтение файлов

Методом PHPget() можно получать содержимое указанного файла. Он возвращает сырую строку содержимого файла:

PHP
$contents Storage::get('file.jpg');
+ 5.1

добавлено в 5.1 ()

Методом PHPhas() можно определить существование файла на диске:

PHP
$exists Storage::disk('s3')->has('file.jpg');
+ 5.0

добавлено в 5.0 ()

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

Метаданные файла

Для получения размера файла в байтах служит метод PHPsize():

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

Для получения времени последней модификации файла (отметка времени UNIX) служит метод PHPlastModified():

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

Запись файлов

Для записи файла на диск служит метод PHPput(). Также вы можете передать в метод PHPput() PHP-resource, чтобы использовать низкоуровневую поддержку потоков Flysystem. Очень рекомендуем использовать потоки при работе с большими файлами:

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

Storage::put('file.jpg'$resource);

Метод PHPcopy() используется для копирования существующего файла в новое расположение на диске:

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

Метод PHPmove() используется для переименования или перемещения существующего файла в новое расположение:

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

Добавление контента в начало / конец файла

Для вставки контента в начало или конец файла служат методы PHPprepend() и PHPappend():

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

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

Удаление файлов

Метод PHPdelete() принимает имя одного файла или массив файлов для удаления с диска:

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

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

Папки

Получение всех файлов из папки

Метод PHPfiles() возвращает массив всех файлов из указанной папки. Если вы хотите получить массив всех файлов папки и её подпапок, используйте метод PHPallFiles():

PHP
$files Storage::files($directory);

$files Storage::allFiles($directory);

Получение всех подпапок

Метод PHPdirectories() возвращает массив всех папок из указанной папки. Вдобавок, вы можете использовать метод PHPallDirectories() для получения списка всех папок в данной папке и во всех её подпапках:

PHP
$directories Storage::directories($directory);

// рекурсивно...
$directories Storage::allDirectories($directory);

Создание папки

Метод PHPmakeDirectory() создаёт указанную папку, включая необходимые подпапки:

PHP
Storage::makeDirectory($directory);

Удаление директории

И наконец, метод PHPdeleteDirectory() удаляет папку с диска, включая все её файлы:

PHP
Storage::deleteDirectory($directory);

Пользовательские файловые системы

Laravel Flysystem предоставляет драйверы для нескольких «drivers» из коробки. Однако, Flysystem не ограничен ими и содержит в себе адаптеры для многих других систем хранения. Вы можете создать свой драйвер, если хотите использовать один из этих дополнительных адаптеров в вашем приложении Laravel.

Чтобы установить свою файловую систему, вы должны будете создать сервис-провайдер такой как DropboxServiceProvider. Для определения своего драйвера вы можете использовать метод PHPextend() фасада Storage в методе PHPboot() провайдера:

PHP
<?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
{
  
/**
   * Выполнение после-регистрационной загрузки сервисов.
   *
   * @return void
   */
  
public function boot()
  {
    
Storage::extend('dropbox', function($app$config) {
      
$client = new DropboxClient(
        
$config['accessToken'], $config['clientIdentifier']
      );

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

  
/**
   * Регистрация привязок в контейнере.
   *
   * @return void
   */
  
public function register()
  {
    
//
  
}
}

Первый аргумент метода PHPextend() — имя драйвера, второй — замыкание, которое получает переменные PHP$app и PHP$config. Замыкание должно возвратить экземпляр League\Flysystem\Filesystem. Переменная PHP$config содержит значения, определенные в config/filesystems.php для указанного диска.

Когда вы создали сервис-провайдер для регистрации расширения, вы можете использовать драйвер dropbox в своём файле с настройками config/filesystem.php.

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.