Advertisement
  1. Code
  2. Amazon S3

Программирование на Yii2: использование Amazon S3

by
Read Time:7 minsLanguages:
This post is part of a series called How to Program With Yii2.
How to Program With Yii2: Google Authentication
Programming With Yii2: Routing and URL Creation

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Если вы вдруг спрашиваете: «Что такое Yii?» то ознакомьтесь сперва с моим предыдущим учебным пособием «Введение в Yii Framework», в котором рассматриваются преимущества Yii и которое включает в себя обзор нового в Yii 2.0, выпущенного в октябре 2014 года.

В этой серии статей, посвященной программированию с Yii2 я помогаю читателям в использование Yii2 Framework для PHP. В сегодняшнем учебном пособии я расскажу вам об основах просмотра, загрузки и скачиваня файлов в облачный сервис хранения данных S3 от Amazon. По сути, я создал простую модель хранения и контроллер в качестве примера, который вы можете расширить для своих нужд.

Напомню, что я участвую в  комментариях под статьей. Меня особенно интересует, если у вас разные подходы, дополнительные идеи или вы хотите предложить темы для будущих статей. Если у вас есть вопрос или предложение темы, пожалуйста, напишите ниже. Вы также можете связаться со мной напрямую в Twitter @reifman .

Что такое Amazon S3?

Amazon S3 представляет собой простое в использовании облачное хранилище для объектов и файлов. Оно обеспечивает 99,99% доступность и 99,999999999% долговечность объектов.

Сервис предлагает множество функций для простого или расширенного использования. Он обычно используется в качестве компонента хранения для службы CDN Amazon CloudFront, но они отличаются и могут использоваться независимо друг от друга.

Вы также можете использовать S3 для миграции файлов с течением времени, чтобы архивировать их в Amazon Glacier, для дополнительной экономии места.

Как и большинство AWS, вы управляете S3 через API, и сегодня я собираюсь провести вас через просмотр, загрузку и скачивание файлов с S3 с помощью Yii.

Начинаем

Чтобы запустить демонстрационный код, вам понадобится ваша собственная учетная запись Amazon AWS и ключи доступа. Вы можете просмотреть дерево S3 из консоли AWS, показанной ниже:

Yii AWS S3 - AWS Console MenuYii AWS S3 - AWS Console MenuYii AWS S3 - AWS Console Menu

S3 состоит из бакетов, в которых хранятся многочисленные каталоги и файлы. Поскольку я использовал AWS в качестве CDN, мое дерево WordPress остается в моем старом бакете. Вы также можете просмотреть свой бакет:

Yii AWS S3 - BucketsYii AWS S3 - BucketsYii AWS S3 - Buckets

Когда я обхожу дерево объектов, вот более глубокий взгляд на содержимое моего бакета:

Yii AWS S3 - Objects Folders and FilesYii AWS S3 - Objects Folders and FilesYii AWS S3 - Objects Folders and Files

Программирование с S3

Опять же, я опишу приветственное дерево от GitHub для нашего демонстрационного кода (см. ссылку на этой странице.) Это из Yii2 basic.

Получение ключей доступа

Вам нужны ключи доступа для AWS S3 API, если у вас их еще нет. Если нет, вы можете получить их, просмотрев учетные данные безопасности и создав новую пару:

Yii AWS S3 - Security Credentials and Access KeysYii AWS S3 - Security Credentials and Access KeysYii AWS S3 - Security Credentials and Access Keys

Для нашей демонстрации вам нужно поместить их в свой файл hello.ini вместе с другими защищенными ключами и кодами доступа:

Установка расширения Yii для AWS

Для этого урока мы будем использовать расширение AWS Federico Motta для Yii2. Он определенно самый молодой программист Yii, код которого я использовал для учебника Envato Tuts +:

Yii AWS S3 - AWS SDK Extension for Yii2 on GithubYii AWS S3 - AWS SDK Extension for Yii2 on GithubYii AWS S3 - AWS SDK Extension for Yii2 on Github

Разве это не удивительно, как быстро дети усваиваются программирование в наши дни?

Вот процесс установки с использованием Composer:

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

Я также зарегистрировал компонент awssdk в hello/config/web.php:

Просмотр моих каталогов S3

Для сегодняшней демонстрации я создал hello/controllers/StorageController.php с методами экшенов для запуска каждого примера, например https://localhost:8888/hello/storage/browse для просмотра каталогов.

Эти методы, в свою очередь, вызывают созданную мной  модель Storage.php с помощью собственных методов.

Вот код контроллера:

Он запрашивает, чтобы модель Storage постучалась в облако в «S3ky» и просмотрела справочный каталог.

Каждый раз, когда экземпляр модели Storage.php создается, он загружает расширение AWS SDK и создает экземпляр S3:

В моем примере browse я просто вывожу каталоги и файлы, но вы можете свободно настраивать этот код по мере необходимости:

Вот результаты, когда я просматриваю http://localhost:8888/hello/storage/browse:

Yii AWS S3 - Browse S3 Objects a listing of directories and files Yii AWS S3 - Browse S3 Objects a listing of directories and files Yii AWS S3 - Browse S3 Objects a listing of directories and files

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

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

И вот метод модели Storage:

Переход по http://localhost:8888/hello/storage/upload отображает возвращаемый URL-адрес, из которого я могу просмотреть загруженный файл, потому что я указал public-read в моем коде выше:

Yii AWS S3 - Results of Upload method - a URL to the new fileYii AWS S3 - Results of Upload method - a URL to the new fileYii AWS S3 - Results of Upload method - a URL to the new file

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

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

Вот код контроллера для скачивания файла:

Поскольку браузер отвечает на content-type, то он должен отображать соответствующее изображение, которое я здесь запрашиваю.

Примечание. Я загружаю обложку из моего опыта, выйдя замуж за корпорацию «Корпоративный человек» (да, это на самом деле произошло). Брак не сложился.

Вот код модели Storage для скачивания:

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

Yii AWS S3 - Marriage Scene with Woman and Marriage LicenseYii AWS S3 - Marriage Scene with Woman and Marriage LicenseYii AWS S3 - Marriage Scene with Woman and Marriage License

Разумеется, вы можете так же легко сохранить результаты на своем сервере в файле. Вам решать. Я призываю вас поиграть с кодом и настраивать его по мере необходимости.

Что дальше?

Надеюсь, это поможет вам в использовании AWS S3 из приложения Yii.

Если вам нравится концепция облачного объекта и хранилища файлов, но вы хотите найти других поставщиков, ознакомьтесь с Альтернативами Amazon AWS. Я постепенно уходил от AWS по ряду причин, упомянутых в статье. Одна из моих следующих задач - перенести мои объекты S3, которые все еще частично используются для моего собственного сервера, которые я могу зеркалировать с помощью KeyCDN.

Следите за предстоящими учебниками в нашей серии статей по программированию с помощью Yii2, поскольку мы продолжаем погружаться в разные аспекты фреймворка. Вы также можете проверить нашу серию Пишем свой стартап на PHP, в которой используется расширенный шаблон Yii2 при создании реального приложения. Приложение Планировщика собраний из этой серии теперь готово к использованию, и все это написано на Yii.

Если вы хотите узнать, когда будет готов следующий учебник Yii2, следуйте за мной @reifman в Twitter или проверьте мою страницу инструктора.

Ссылки по теме

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.