Получить расширение файла laravel

Обновлено: 07.07.2024

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

Конфигурирование

Файл конфигурации файловой системы Laravel находится в config/filesystems.php . В этом файле вы можете настроить все «диски» файловой системы. Каждый диск представляет собой определенный драйвер хранилища и место хранения. Примеры конфигураций для каждого поддерживаемого драйвера включены в конфигурационный файл, так что вы можете изменить конфигурацию, отражающую ваши предпочтения хранения и учетные данные.

Драйвер local взаимодействует с файлами, хранящимися локально на сервере, на котором запущено приложение Laravel, в то время как драйвер s3 используется для записи в службу облачного хранилища Amazon S3.

Вы можете настроить столько дисков, сколько захотите, и даже иметь несколько дисков, использующих один и тот же драйвер.

Локальный драйвер

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

Публичный диск

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

Чтобы сделать эти файлы доступными из интернета, вы должны создать символическую ссылку на storage/app/public в public/storage . Использование этого соглашения о папках позволит хранить ваши публичные файлы в одном каталоге, который может быть легко доступен между развертываниями при использовании систем развертывания с нулевым временем простоя, таких как Envoyer.

Чтобы создать символическую ссылку, вы можете использовать команду storage:link Artisan:

После того, как была создана символическая ссылка, вы можете создавать URL-адреса для сохраненных файлов, используя помощник asset :

Вы можете настроить дополнительные символические ссылки в файле конфигурации filesystems . Каждая из настроенных ссылок будет создана, когда вы запустите команду storage:link :

Предварительная подготовка драйверов

Пакеты Composer

Перед использованием драйверов S3 или SFTP вам необходимо установить соответствующий пакет с помощью менеджера пакетов Composer:

    Amazon S3: league/flysystem-aws-s3-v3

Кроме того, вы можете установить декоратор CachedAdapter для повышения производительности:

Конфигурирование драйвера S3

Информация о конфигурации драйвера S3 находится в вашем файле конфигурации config/filesystems.php . Этот файл содержит пример массива конфигурации для драйвера S3. Вы можете изменить этот массив своей собственной конфигурацией S3 и учетными данными. Для удобства эти переменные среды соответствуют соглашению об именах, используемому в интерфейсе командной строки AWS.

Конфигурирование драйвера FTP

Интеграция Laravel с Flysystem отлично работает с FTP; однако, пример конфигурации по умолчанию не включен в конфигурационный файл config/filesystems.php фреймворка. Если вам нужно настроить файловую систему FTP, вы можете использовать пример конфигурации ниже:

Конфигурирование драйвера SFTP

Интеграция Laravel с Flysystem отлично работает с SFTP; однако, пример конфигурации по умолчанию не включен в конфигурационный файл config/filesystems.php фреймворка. Если вам нужно настроить файловую систему SFTP, вы можете использовать пример конфигурации ниже:

Кеширование

Чтобы включить кеширование для конкретного диска, вы можете добавить директиву cache в параметры конфигурации этого диска. Параметр cache должен быть массивом параметров кеширования, содержащим имя disk , время expire в секундах и prefix кеша:

Доступ к экземплярам дисков

Фасад Storage используется для взаимодействия с любым из ваших сконфигурированных дисков. Например, вы можете использовать метод put фасада, чтобы сохранить аватар на диске по умолчанию. Если вы вызываете методы фасада Storage без предварительного вызова метода disk , то метод будет проксирован на диск по умолчанию:

Если ваше приложение взаимодействует с несколькими дисками, то вы можете использовать метод disk фасада Storage для работы с файлами на указанном диске:

Получение файлов

Метод get используется для получения содержимого файла. Необработанное строковое содержимое файла будет возвращено методом. Помните, что все пути к файлам должны быть указаны относительно «корня» диска:

Метод exists используется для определения, существует ли файл на диске:

Метод missing используется, чтобы определить, отсутствует ли файл на диске:

Скачивание файлов

URL-адреса файлов

Вы можете использовать метод url , чтобы получить URL для указанного файла. Если вы используете драйвер local , он обычно просто добавляет /storage к указанному пути и возвращает относительный URL-адрес файла. Если вы используете драйвер s3 , будет возвращен абсолютный внешний URL-адрес:

При использовании драйвера local все файлы, которые должны быть общедоступными, должны быть помещены в каталог storage/app/public . Кроме того, вы должны создать символическую ссылку в public/storage , которая указывает на каталог storage/app/public .

При использовании драйвера local возвращаемое значение url не является URL-кодированным. По этой причине мы рекомендуем всегда хранить ваши файлы, используя имена, которые будут создавать допустимые URL-адреса.

Временные URL

Используя метод temporaryUrl , вы можете создавать временные URL-адреса для файлов, хранящихся с помощью драйвера s3 . Этот метод принимает путь и экземпляр DateTime , указывающий, когда должен истечь доступ к файлу по URL:

Если вам нужно указать дополнительные параметры запроса S3, то вы можете передать массив параметров запроса в качестве третьего аргумент методу temporaryUrl :

Настройка хоста URL

Если вы хотите заранее определить хост для URL-адресов, сгенерированных с помощью фасада Storage , то вы можете добавить параметр url в массив конфигурации диска:

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

Помимо чтения и записи файлов, Laravel также может предоставлять информацию о самих файлах. Например, метод size используется для получения размера файла в байтах:

Метод lastModified возвращает временную метку UNIX последнего изменения файла:

Пути к файлам

Вы можете использовать метод path , чтобы получить путь к указанному файлу. Если вы используете драйвер local , он вернет абсолютный путь к файлу. Если вы используете драйвер s3 , этот метод вернет относительный путь к файлу в корзине S3 :

Хранение файлов

Метод put используется для сохранения содержимого файла на диске. Вы также можете передать resource PHP методу put , который будет использовать поддержку базового потока Flysystem. Помните, что все пути к файлам должны быть указаны относительно «корневого» расположения, настроенного для диска:

Автоматическая потоковая передача

Следует отметить несколько важных моментов, касающихся метода putFile . Обратите внимание, что мы указали только имя каталога, а не имя файла. По умолчанию метод putFile генерирует уникальный идентификатор, который будет служить именем файла. Расширение файла будет определено путем проверки MIME-типа файла. Путь к файлу будет возвращен методом putFile , так что вы можете сохранить путь, включая сгенерированное имя файла, в вашей базе данных.

Методы putFile и putFileAs также принимают аргумент для определения «видимости» сохраненного файла. Это особенно полезно, если вы храните файл на облачном диске, таком как Amazon S3, и хотите, чтобы файл был общедоступным через сгенерированные URL:

Добавление информации к файлам

Методы prepend и append позволяют записывать в начало или конец файла, соответственно:

Копирование и перемещение файлов

Метод copy используется для копирования существующего файла в новое место на диске, а метод move используется для переименования или перемещения существующего файла в новое место:

Загрузка файлов

В веб-приложениях одним из наиболее распространенных вариантов хранения файлов является хранение загруженных пользователем файлов, таких как фотографии и документы. Laravel упрощает хранение загруженных файлов с помощью метода store экземпляра загружаемого файла. Вызовите метод store , указав путь, по которому вы хотите сохранить загруженный файл:

В этом примере следует отметить несколько важных моментов. Обратите внимание, что мы указали только имя каталога, а не имя файла. По умолчанию метод store генерирует уникальный идентификатор, который будет служить именем файла. Расширение файла будет определено путем проверки MIME-типа файла. Путь к файлу будет возвращен методом store , поэтому вы можете сохранить путь, включая сгенерированное имя файла, в своей базе данных.

Вы также можете вызвать метод putFile фасада Storage , чтобы выполнить ту же операцию сохранения файлов, что и в примере выше:

Указание имени файла

Если вы не хотите, чтобы имя файла автоматически присваивалось вашему сохраненному файлу, вы можете использовать метод storeAs , который получает путь, имя файла и (необязательный) диск в качестве аргументов:

Вы также можете использовать метод putFileAs фасада Storage , который будет выполнять ту же операцию сохранения файлов, что и в примере выше:

Непечатаемые и недопустимые символы Unicode будут автоматически удалены из путей к файлам. По этой причине, вы по желанию можете очистить пути к файлам перед их передачей в методы хранения файлов Laravel. Пути к файлам нормализуются с помощью метода League\Flysystem\Util::normalizePath .

Указание диска

По умолчанию метод store загружаемого файла будет использовать ваш диск по умолчанию. Если вы хотите указать другой диск, передайте имя диска в качестве второго аргумента методу store :

Если вы используете метод storeAs , вы можете передать имя диска в качестве третьего аргумента метода:

Другая информация о загружаемом файле

Если вы хотите получить оригинальное имя загружаемого файла, вы можете сделать это с помощью метода getClientOriginalName :

Метод extension используется для получения расширения загружаемого файла:

Видимость файла

В интеграции Laravel Flysystem «видимость» – это абстракция прав доступа к файлам на нескольких платформах. Файлы могут быть объявлены public или private . Когда файл объявляется public , вы указываете, что файл обычно должен быть доступен для других. Например, при использовании драйвера s3 вы можете получить URL-адреса для public файлов.

Вы можете задать видимость при записи файла с помощью метода put :

Если файл уже был сохранен, его видимость может быть получена и задана с помощью методов getVisibility и setVisibility , соответственно:

При взаимодействии с загружаемыми файлами, вы можете использовать методы storePublicly и storePubliclyAs для сохранения загружаемого файла с видимостью public :

Локальные файлы и видимость

При использовании драйвера local , видимость public интерпретируется в право доступа 0755 для каталогов и право доступа 0644 для файлов. Вы можете изменить сопоставление прав доступа в файле конфигурации filesystems вашего приложения:

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

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

При необходимости вы можете указать диск, с которого следует удалить файл:

Каталоги

Получение всех файлов каталога

Метод files возвращает массив всех файлов указанного каталога. Если вы хотите получить список всех файлов каталога, включая все подкаталоги, вы можете использовать метод allFiles :

Получение всех каталогов из каталога

Метод directories возвращает массив всех каталогов указанного каталога. Кроме того, вы можете использовать метод allDirectories , чтобы получить список всех каталогов внутри указанного каталога и всех его подкаталогов:

Создание каталога

Метод makeDirectory создаст указанный каталог, включая все необходимые подкаталоги:

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

Наконец, для удаления каталога и всех его файлов можно использовать метод deleteDirectory :

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

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

Чтобы определить собственную файловую систему, вам понадобится адаптер Flysystem. Давайте добавим в наш проект адаптер Dropbox, поддерживаемый сообществом:

Затем вы можете зарегистрировать драйвер в методе boot одного из поставщиков служб вашего приложения. Для этого вы должны использовать метод extend фасада Storage :

Laravel предоставляет мощную абстракцию для работы с файловой системой благодаря php-пакету Flysystem от Франка де Жонге. Настройки файловой системы находятся в файле config/filesystems.php . В нём можно настроить так называемые «диски». Каждый диск представляет собой определенный драйвер и место хранения. В конфигурационном файле имеются примеры для каждого поддерживаемого драйвера.

Функция storage_path() возвращает полный путь к директории storage . Также можно использовать функцию storage_path() для получения полного пути к указанному файлу относительно директории хранилища:

Функция public_path() возвращает полный путь к директории public , которая является корнем веб-сервера, т.е. доступна из веб. Также можно использовать функцию public_path() для получения полного пути к указанному файлу или директории:

Сразу после установки Laravel доступны диски local и public , использующие драйвер local . Для диска local место хранения — директория storage/app , для диска public место хранения — директория storage/app/public . Диск local является диском по умолчанию.

Какие символьные ссылки создавать — задается в файле конфигурации, см. выше. Когда файл сохранён на диске и создана символьная ссылка, можно создать URL к файлу с помощью хелпера asset() или метода url() фасада Storage .

Методы фасада Storage

При использовании драйвера local все файловые операции выполняются относительно директории root , определенной в конфигурационном файле. Для диска local директория root — это storage/app , для диска public директория root — это storage/app/public .

При вызове метода фасада Storage без предварительного вызова метода disk() — вызов будет автоматически передан диску по умолчанию.

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

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

Метод url() позволяет получить URL файла. При использовании диска local будет возвращён URL вида /storage/images/image.jpg . При использовании диска public будет возвращён полный URL, домен сайта будет получен из .env -файла в корне проекта, это настройка APP_URL .

Метод size() позволяет получить размер файла в байтах:

Метод copy() копирует файл, метод move() перемещает файл:

Метод prepend() добавляет содержимое в начало файла, метод append() добавляет содержимое в конец файла:

Метод delete() удаляет указанный файл:

Метод files() возвращает массив имен файлов в указанной директории. А метод allFiles() — массив имен файлов в указанной директории и во всех поддиректориях.

Метод directories() возвращает массив имен директорий в указанной директории. А метод allDirectories() — массив имен директорий в указанной директории и во всех поддиректориях.

Метод makeDirectory() создает новую директорию, а метод deleteDirectory() удаляет указанную директорию.

Загрузка файлов

В Laravel очень просто сохранять загружаемые файлы методом store() на экземпляре загружаемого файла:

Мы указываем только директорию avatars , а имя файла будет сформировано автоматически. Метод вернёт путь к файлу, поэтому можно сохранить в БД весь путь, включая сгенерированное имя. Файл будет сохранен на диск по умолчанию, но можно указать диск вторым аргументом метода store() .

Также можно использовать метод putFile() фасада Storage для выполнения аналогичного действия:

Чтобы задать свое имя файла и (опционально) диск для сохранения, можно использовать метод storeAs() :

Также можно использовать метод putFileAs() фасада Storage для выполнения аналогичного действия:

Внедрение зависимости и параметры роута

Если метод вашего контроллера также ожидает ввода из параметров роута, вам надо перечислить параметры вашего роута после других зависимостей. Например, если ваш роут определён вот так:

Обращение к запросу через замыкания роутов

Методы и путь запроса

Получение пути запроса

Метод is позволяет проверить соответствие пути запроса заданной маске. При использовании этого метода можно использовать символ звёздочки * в качестве маски:

Получение URL запроса

Для получения полного URL без строки запроса используйте методы url или fullUrl . Метод url вернет URL без строки запроса, а метод fullUrl - со строкой запроса:

Получение метода запроса

Запросы PSR-7

Когда вы установите эти библиотеки, вы можете получить запрос PSR-7, указав интерфейс запроса в замыкании вашего роута или методе контроллера:

IЕсли вы возвращаете экземпляр отклика PSR-7 из роута или контроллера, он будет автоматически конвертирован обратно в экземпляр отклика Laravel и будет отображён фреймворком.

Обрезка и нормализация ввода

Получение ввода

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

Вы можете получить все данные ввода в виде массива с помощью метода all :

Получения значения из ввода

Вы можете передать значение по умолчанию вторым аргументом метода input . Это значение будет возвращено, когда запрашиваемый ввод отсутствует в запросе:

При работе с формами, имеющими переменные-массивы, вы можете использовать синтаксис с точкой для обращения к массивам:

Получение ввода через динамические свойства

При использовании динамических свойств Laravel сначала ищет значение параметра в данных запроса. Если его там нет, Laravel будет искать поле в параметрах роута.

Получения значения из ввода JSON

При отправке JSON-запросов в приложение вы можете получить доступ к JSON-данным методом input , поскольку заголовок Content-Type запроса установлен в application/json . Вы даже можете использовать «точечный» синтаксис, чтобы погружаться в массивы JSON:

Получение части переменных запроса

Если вам необходимо получить только часть данных ввода, используйте методы only и except . Оба этих метода принимают один массив или динамический список аргументов:

Метод only возвращает все пары ключ / значение, которые вы запрашиваете, даже если ключа нет во входящих запросах. Когда ключ не присутствует в запросе, значение будет null . Если вы хотите получить часть входных данных, которые действительно присутствуют в запросе, можно использовать метод intersect :

Была ли передана переменная?

Вы должны использовать метод has , чтобы определить присутствует ли значение в запросе. Метод has вернёт true , если значение присутствует и не является пустой строкой:

Когда передается массив, метод has определит присутствуют ли все указанные значения:

Старый ввод

Laravel позволяет сохранить ввод от одного запроса во время следующего запроса. Это может пригодиться во время повторного наполнения форм после обнаружения ошибок валидации. Однако, если вы используете включённые в Laravel возможности проверки ввода, то вряд ли вам понадобиться использовать эти методы вручную, так как встроенные возможности Laravel вызовут их автоматически.

Передача ввода в сессию

Вы также можете использовать методы flashOnly и flashExcept для передачи некоторых переменных в сессию. Эти методы полезны для хранения важной информации (например, паролей) вне сессии:

Передача ввода и последующее перенаправление

Получение старого ввода

Для получения переданного ввода из предыдущего запроса используйте метод old на экземпляре Request . Метод old получит переданные ранее данные ввода из сессии:

В Laravel есть также и глобальный хелпер old . Когда вы выводите старый ввод в шалоне Blade, удобнее использовать этот хелпер old . Если для данного поля нет старого ввода, вернётся null :

Cookies

Получение Cookies из запросов

Добавление cookie к ответам

Метод cookie также принимает ещё несколько аргументов, используемых менее часто. В целом эти аргументы имеют то же назначение и значение, что и передаваемые в PHP-метод setcookie аргументы:

Генерация экземпляров Cookie

Файлы

Получение загруженных файлов

Вы можете определить, есть ли в запросе файл, с помощью метода hasFile :

Прошёл ли загруженный файл проверку?

Вдобавок к проверке наличия файла вы можете проверить, что при загрузке файла не возникло никаких проблем, с помощью метода isValid :

Пути и расширения файла

В классе UploadedFile также есть методы для получения полного пути файла и его расширения. Метод extension пытается определить расширение файла на основе его содержимого. Это расширение может отличаться от указанного клиентом:

Другие методы для работы с файлами

Есть множество других методов для экземпляров UploadedFile . Загляните в документацию API класса для получения более подробной информации об этих методах.

Хранение загруженных файлов

Для хранения загруженного файла обычно используется одна из настроенных файловых систем. В классе UploadedFile есть метод store , который переместит загруженный файл на один из ваших дисков, который может располагаться в вашей локальной файловой системе или даже в облачном хранилище, таком как Amazon S3.

Метод store принимает путь, куда необходимо сохранить файл относительно настроенного корневого каталога файловой системы. Этот путь не должен включать имя файла, поскольку будет автоматически сгенерирован UUID в качестве имени файла.

Также метод store принимает второй необязательный аргумент — имя диска для сохранения файла. Этот метод вернёт путь файла относительно корня диска:

Если вы не хотите автоматически генерировать имя файла, используйте метод storeAs , который принимает аргументы: путь, имя файла и имя диска:

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

Конфигурация

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

Вы можете настроить столько дисков, сколько хотите, и даже иметь несколько дисков, которые используют один и тот же драйвер.

Публичный диск

public Диск предназначен для файлов , которые будут доступны для общественности. По умолчанию public диск использует local драйвер и сохраняет эти файлы в . Чтобы сделать их доступными из Интернета, вы должны создать символическую ссылку с на . Это соглашение будет хранить ваши общедоступные файлы в одном каталоге, который может быть легко распространен между развертываниями при использовании систем развертывания с нулевым временем простоя, таких как Envoyer . storage/app/public public/storage storage/app/public

Чтобы создать символическую ссылку, вы можете использовать команду Artisan: storage:link

После сохранения файла и создания символической ссылки вы можете создать URL-адрес для файлов с помощью asset помощника:

Местный водитель

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

Необходимые условия для водителя

Композитор Пакеты

Перед использованием драйверов SFTP, S3 или Rackspace вам необходимо установить соответствующий пакет через Composer:

Для производительности абсолютно необходимо использовать кэшированный адаптер. Для этого вам понадобится дополнительный пакет:

Конфигурация драйвера S3

Информация о конфигурации драйвера S3 находится в вашем файле конфигурации. Этот файл содержит пример массива конфигурации для драйвера S3. Вы можете изменить этот массив с помощью своей собственной конфигурации и учетных данных S3. Для удобства эти переменные среды соответствуют соглашению об именах, используемому AWS CLI. config/filesystems.php

Конфигурация драйвера FTP

Интеграция Laravel с Flysystem прекрасно работает с FTP; однако пример конфигурации не включен в файл конфигурации фреймворка по умолчанию . Если вам нужно настроить файловую систему FTP, вы можете использовать пример конфигурации ниже: filesystems.php

Конфигурация драйвера SFTP

Интеграция Laravel с Flysystem прекрасно работает с SFTP; однако пример конфигурации не включен в файл конфигурации фреймворка по умолчанию . Если вам нужно настроить файловую систему SFTP, вы можете использовать пример конфигурации ниже: filesystems.php

Конфигурация Rackspace Driver

Интеграция Laravel с Flysystem прекрасно работает с Rackspace; однако пример конфигурации не включен в файл конфигурации фреймворка по умолчанию . Если вам нужно настроить файловую систему Rackspace, вы можете использовать пример конфигурации ниже: filesystems.php

Кэширование

Чтобы включить кэширование для данного диска, вы можете добавить cache директиву к параметрам конфигурации диска. Параметр cache должен быть массивом параметров кэширования, содержащих disk имя, expire время в секундах и кэш prefix :

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

Storage Фасад может быть использован для взаимодействия с любым из ваших настроенных дисков. Например, вы можете использовать put метод на фасаде, чтобы сохранить аватар на диске по умолчанию. Если вы вызываете методы на Storage фасаде без предварительного вызова disk метода, вызов метода будет автоматически передан на диск по умолчанию:

Если ваше приложение взаимодействует с несколькими дисками, вы можете использовать disk метод на Storage фасаде для работы с файлами на определенном диске:

Получение файлов

Этот get метод может использоваться для извлечения содержимого файла. Необработанное содержимое строки файла будет возвращено методом. Помните, что все пути к файлам должны быть указаны относительно «корневого» расположения, настроенного для диска:

Этот exists метод может использоваться для определения того, существует ли файл на диске:

Загрузка файлов

URL файлов

Вы можете использовать url метод, чтобы получить URL для данного файла. Если вы используете local драйвер, он обычно просто добавляется /storage к указанному пути и возвращает относительный URL-адрес файла. Если вы используете драйвер s3 или rackspace , полный URL-адрес удаленного будет возвращен:

Помните, что если вы используете local драйвер, все файлы, которые должны быть общедоступными, должны быть помещены в каталог. Кроме того, вы должны создать символическую ссылку, по которой указывается каталог. storage/app/public public/storage storage/app/public

Временные URL

Для файлов, хранящихся с использованием драйвера s3 или rackspace , вы можете создать временный URL-адрес для данного файла, используя temporaryUrl метод. Этот метод принимает путь и DateTime экземпляр, указывающий, когда должен истечь URL:

Если вам нужно указать дополнительные параметры запроса S3 , вы можете передать массив параметров запроса в качестве третьего аргумента temporaryUrl методу:

Настройка хоста локального URL

Если вы хотите предварительно определить хост для файлов, хранящихся на диске, с помощью local драйвера, вы можете добавить url опцию в массив конфигурации диска:

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

Помимо чтения и записи файлов, Laravel также может предоставить информацию о самих файлах. Например, size метод может быть использован для получения размера файла в байтах:

lastModified Метод возвращает UNIX метку последнего времени файл был изменен:

Хранение файлов

Этот put метод может использоваться для хранения необработанного содержимого файла на диске. Вы также можете передать PHP resource в put метод, который будет использовать базовую потоковую поддержку Flysystem. Использование потоков очень рекомендуется при работе с большими файлами:

Автоматическая трансляция

Есть несколько важных вещей, которые стоит отметить в отношении putFile метода. Обратите внимание, что мы указали только имя каталога, а не имя файла. По умолчанию putFile метод генерирует уникальный идентификатор в качестве имени файла. Расширение файла будет определено путем изучения типа файла MIME. Путь к файлу будет возвращен putFile методом, чтобы вы могли сохранить путь, включая сгенерированное имя файла, в вашей базе данных.

В putFile и putFileAs методы также принимают аргумент , чтобы указать «видимость» сохраненный файл. Это особенно полезно, если вы храните файл на облачном диске, таком как S3, и хотите, чтобы файл был общедоступным:

Добавление и добавление в файлы

В prepend и append методы позволяют писать в начало или конец файла:

Копирование и перемещение файлов

Этот copy метод может использоваться для копирования существующего файла в новое место на диске, в то время как move метод может использоваться для переименования или перемещения существующего файла в новое место:

Загрузка файлов

В веб-приложениях одним из наиболее распространенных сценариев использования для хранения файлов является хранение загруженных пользователем файлов, таких как изображения профиля, фотографии и документы. Laravel позволяет очень легко хранить загруженные файлы, используя store метод для экземпляра загруженного файла. Вызовите store метод с путем, по которому вы хотите сохранить загруженный файл:

В этом примере следует отметить несколько важных моментов. Обратите внимание, что мы указали только имя каталога, а не имя файла. По умолчанию store метод генерирует уникальный идентификатор в качестве имени файла. Расширение файла будет определено путем изучения типа файла MIME. Путь к файлу будет возвращен store методом, чтобы вы могли сохранить путь, включая сгенерированное имя файла, в вашей базе данных.

Вы также можете вызвать putFile метод на Storage фасаде, чтобы выполнить те же манипуляции с файлами, что и в примере выше:

Указание имени файла

Если вы не хотите, чтобы имя файла автоматически присваивалось вашему сохраненному файлу, вы можете использовать storeAs метод, который получает путь, имя файла и (необязательно) диск в качестве аргументов:

Вы также можете использовать putFileAs метод на Storage фасаде, который будет выполнять те же операции с файлами, что и в примере выше:

Указание диска

По умолчанию этот метод будет использовать ваш диск по умолчанию. Если вы хотите указать другой диск, передайте имя диска в качестве второго аргумента store методу:

Видимость файла

В интеграции Flysystem от Laravel «видимость» - это абстракция прав доступа к файлам на разных платформах. Файлы могут быть либо объявлены, public либо private . Когда файл объявляется public , вы указываете, что файл, как правило, должен быть доступен для других. Например, при использовании драйвера S3 вы можете получить URL-адреса для public файлов.

Вы можете установить видимость при настройке файла с помощью put метода:

Если файл уже был сохранен, его видимость может быть получена и установить с помощью getVisibility и setVisibility методов:

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

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

При необходимости вы можете указать диск, с которого следует удалить файл:

Справочники

Получить все файлы в каталоге

files Метод возвращает массив всех файлов в заданном каталоге. Если вы хотите получить список всех файлов в данном каталоге, включая все подкаталоги, вы можете использовать allFiles метод:

Получить все каталоги в каталоге

directories Метод возвращает массив всех каталогов в данном каталоге. Кроме того, вы можете использовать allDirectories метод для получения списка всех каталогов в данном каталоге и всех его подкаталогах:

Создать каталог

makeDirectory Метод создания данного каталога, включая все необходимые подкаталоги:

Удалить каталог

Наконец, deleteDirectory метод может быть использован для удаления каталога и всех его файлов:

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

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

Для настройки пользовательской файловой системы вам понадобится адаптер Flysystem. Давайте добавим в наш проект поддерживаемый сообществом адаптер Dropbox:

Затем вы должны создать поставщика услуг, такого как DropboxServiceProvider . В boot методе провайдера вы можете использовать метод Storage фасада extend для определения пользовательского драйвера:


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

Конфигурация

Файл конфигурации файловой системы находится по адресу config/filesystems.php . В этом файле вы можете настроить все свои " диски ". Каждый диск представляет собой определенный драйвер хранилища и место хранения. Примеры конфигураций для каждого поддерживаемого драйвера включены в файл конфигурации. Итак, измените конфигурацию, чтобы отразить ваши предпочтения хранения и учетные данные.

Вы можете настроить столько дисков, сколько захотите, и даже можете иметь несколько дисков, использующих один и тот же драйвер.

Открытый диск

Диск public предназначен для файлов, которые будут общедоступными. По умолчанию диск public использует драйвер local и хранит эти файлы в storage/app/public . Чтобы сделать их доступными из Интернета, вы должны создать символическую ссылку с public/storage на storage/app/public . В соответствии с этим соглашением ваши общедоступные файлы будут храниться в одном каталоге, который можно легко использовать в разных развертываниях при использовании систем развертывания с нулевым временем простоя, таких как Envoyer .

Чтобы создать символическую ссылку, вы можете использовать Artisan-команду storage:link :

После сохранения файла и создания символической ссылки вы можете создать URL-адрес файлов с помощью помощника asset :

Вы можете настроить дополнительные символические ссылки в конфигурационном файле filesystems . Каждая из настроенных ссылок будет создана при запуске команды storage:link :

Локальный драйвер

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

Разрешения

Видимость public преобразуется в 0755 для каталогов и 0644 для файлов. Вы можете изменить сопоставление разрешений в файле конфигурации filesystems :

Необходимые условия для драйвера

Пакеты композитора

Перед использованием драйверов SFTP или S3 вам необходимо установить соответствующий пакет через Composer:

Абсолютное требование для повышения производительности - использование кэшированного адаптера. Для этого вам понадобится дополнительный пакет:

Конфигурация драйвера S3

Информация о конфигурации драйвера S3 находится в вашем файле конфигурации config/filesystems.php . Этот файл содержит пример массива конфигурации для драйвера S3. Вы можете изменить этот массив своей собственной конфигурацией S3 и учетными данными. Для удобства эти переменные среды соответствуют соглашению об именах, используемому AWS CLI.

Конфигурация драйвера FTP

Интеграция Laravel's Flysystem отлично работает с FTP; однако пример конфигурации не включен в файл конфигурации по умолчанию filesystems.php платформы. Если вам нужно настроить файловую систему FTP, вы можете использовать пример конфигурации ниже:

Конфигурация драйвера SFTP

Интеграция Laravel Flysystem отлично работает с SFTP; однако пример конфигурации не включен в файл конфигурации по умолчанию filesystems.php платформы. Если вам нужно настроить файловую систему SFTP, вы можете использовать приведенный ниже пример конфигурации:

Кеширование

Чтобы включить кэширование для данного диска, вы можете добавить директиву cache в параметры конфигурации диска. Параметр cache должен быть массивом параметров кеширования, содержащим имя disk , время expire в секундах и кэш prefix :

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

Фасад Storage может использоваться для взаимодействия с любым из ваших настроенных дисков. Например, вы можете использовать метод put на фасаде, чтобы сохранить аватар на диске по умолчанию. Если вы вызываете методы фасада Storage без предварительного вызова метода disk , вызов метода будет автоматически передан на диск по умолчанию:

Если ваше приложение взаимодействует с несколькими дисками, вы можете использовать метод disk фасада Storage для работы с файлами на определенном диске:

Получение файлов

Метод get может использоваться для получения содержимого файла. Необработанное строковое содержимое файла будет возвращено методом. Помните, что все пути к файлам должны быть указаны относительно корневого каталога " ", настроенного для диска:

Метод exists может использоваться, чтобы определить, существует ли файл на диске:

Метод missing может использоваться для определения отсутствия файла на диске:

Загрузка файлов

URL-адреса файлов

Вы можете использовать метод url , чтобы получить URL для данного файла. Если вы используете драйвер local , он обычно просто добавляет /storage к заданному пути и возвращает относительный URL-адрес файла. Если вы используете драйвер s3 , будет возвращен полный удаленный URL:

Помните, что если вы используете драйвер local , все файлы, которые должны быть общедоступными, должны быть помещены в каталог storage/app/public . Кроме того, вы должны создать символическую ссылку в public/storage , которая указывает на каталог storage/app/public .

Временные URL

Для файлов, хранящихся с использованием s3 , вы можете создать временный URL-адрес для данного файла, используя метод temporaryUrl . Этот метод принимает путь и экземпляр DateTime , указывающий, когда истекает срок действия URL:

Если вам нужно указать дополнительные параметры запроса S3 , вы можете передать массив параметров запроса в качестве третьего аргумента методу temporaryUrl :

Настройка хоста URL

Если вы хотите предварительно определить хост для файловых URL, сгенерированных с использованием фасада Storage , вы можете добавить параметр url в массив конфигурации диска:

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

Помимо чтения и записи файлов, Laravel также может предоставлять информацию о самих файлах. Например, метод size может использоваться для получения размера файла в байтах:

Метод lastModified возвращает временную метку UNIX последнего изменения файла:

Сохранение файлов

Метод put может использоваться для хранения необработанного содержимого файла на диске. Вы также можете передать PHP resource методу put , который будет использовать базовую поддержку потока Flysystem. Помните, что все пути к файлам должны быть указаны относительно корневого каталога " ", настроенного для диска:

Автоматическая потоковая передача

Следует отметить несколько важных моментов относительно метода putFile . Обратите внимание, что мы указали только имя каталога, а не имя файла. По умолчанию метод putFile генерирует уникальный идентификатор, который будет служить именем файла. Расширение файла будет определено путем проверки MIME-типа файла. Путь к файлу будет возвращен методом putFile , поэтому вы можете сохранить путь, включая сгенерированное имя файла, в своей базе данных.

Методы putFile и putFileAs также принимают аргумент, чтобы указать " видимость " сохраненного файла. Это особенно полезно, если вы сохраняете файл на облачном диске, таком как S3, и хотите, чтобы файл был общедоступным:

Подготовка & Добавление к файлам

Методы prepend и append позволяют записывать в начало или конец файла:

Копирование & Перемещение файлов

Метод copy может использоваться для копирования существующего файла в новое место на диске, а метод move может использоваться для переименования или перемещения существующего файла в новое место:

Загрузка файлов

В веб-приложениях одним из наиболее распространенных вариантов использования файлов является хранение загруженных пользователем файлов, таких как изображения профиля, фотографии и документы. Laravel упрощает хранение загруженных файлов с помощью метода store для экземпляра загруженного файла. Вызовите метод store с путем, по которому вы хотите сохранить загруженный файл:

В этом примере следует отметить несколько важных моментов. Обратите внимание, что мы указали только имя каталога, а не имя файла. По умолчанию метод store генерирует уникальный идентификатор, который будет служить именем файла. Расширение файла будет определено путем проверки MIME-типа файла. Путь к файлу будет возвращен методом store , поэтому вы можете сохранить путь, включая сгенерированное имя файла, в своей базе данных.

Вы также можете вызвать метод putFile фасада Storage для выполнения тех же манипуляций с файлом, что и в примере выше:

Указание имени файла

Если вы не хотите, чтобы имя файла автоматически присваивалось вашему сохраненному файлу, вы можете использовать метод storeAs , который получает путь, имя файла и (необязательный) диск в качестве аргументов:

Вы также можете использовать метод putFileAs на фасаде Storage , который будет выполнять те же манипуляции с файлом, что и в примере выше:

Непечатаемые и недопустимые символы Юникода будут автоматически удалены из путей к файлам. Следовательно, вы можете очистить пути к файлам перед их передачей в методы хранения файлов Laravel. Пути к файлам нормализованы с использованием метода League\Flysystem\Util::normalizePath .

Указание диска

По умолчанию этот метод будет использовать ваш диск по умолчанию. Если вы хотите указать другой диск, передайте имя диска в качестве второго аргумента метода store :

Если вы используете метод storeAs , вы можете передать имя диска в качестве третьего аргумента метода:

Другая информация о файле

Если вы хотите получить оригинальное имя загруженного файла, вы можете сделать это с помощью метода getClientOriginalName :

Метод extension может использоваться для получения расширения загруженного файла:

Доступность файла

В интеграции Laravel с Flysystem " видимость " - это абстракция прав доступа к файлам на нескольких платформах. Файлы могут быть объявлены public или private . Когда файл объявлен public , вы указываете, что файл обычно должен быть доступен для других. Например, при использовании драйвера S3 вы можете получить URL-адреса для файлов public .

Вы можете установить видимость при настройке файла с помощью метода put :

Если файл уже был сохранен, его видимость можно получить и установить с помощью методов getVisibility и setVisibility :

При взаимодействии с загруженными файлами вы можете использовать методы storePublicly и storePubliclyAs для сохранения загруженного файла с видимостью public :

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

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

При необходимости вы можете указать диск, с которого следует удалить файл:

Каталоги

Получить все файлы в каталоге

Метод files возвращает массив всех файлов в данном каталоге. Если вы хотите получить список всех файлов в данном каталоге, включая все подкаталоги, вы можете использовать метод allFiles :

Получить все каталоги в каталоге

Метод directories возвращает массив всех каталогов в данном каталоге. Кроме того, вы можете использовать метод allDirectories , чтобы получить список всех каталогов в данном каталоге и всех его подкаталогах:

Создать каталог

Метод makeDirectory создаст указанный каталог, включая все необходимые подкаталоги:

Удалить каталог

Наконец, метод deleteDirectory может использоваться для удаления каталога и всех его файлов:

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

Интеграция Laravel с Flysystem предоставляет драйверы для нескольких " драйверов " из коробки; однако Flysystem этим не ограничивается и имеет адаптеры для многих других систем хранения. Вы можете создать собственный драйвер, если хотите использовать один из этих дополнительных адаптеров в своем приложении Laravel.

Для настройки собственной файловой системы вам понадобится адаптер Flysystem. Давайте добавим в наш проект адаптер Dropbox, поддерживаемый сообществом:

Затем вы должны создать поставщика услуг , например DropboxServiceProvider . В методе поставщика boot вы можете использовать метод extend фасада Storage для определения настраиваемого драйвера:

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

Затем зарегистрируйте поставщика услуг в файле конфигурации config/app.php :

Создав и зарегистрировав поставщика услуг расширения, вы можете использовать драйвер dropbox в файле конфигурации config/filesystems.php .

Если не указано иное, согласие на содержание этой страницы разрешено. CC BY 4.0.

Читайте также: