Advertisement
  1. Code
  2. Amazon S3

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

by
Difficulty:IntermediateLength:MediumLanguages:
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 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 Menu

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

Yii AWS S3 - Buckets

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

Yii AWS S3 - Objects Folders and Files

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

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

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

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

Yii 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 Github

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

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

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

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

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

Для сегодняшней демонстрации я создал hello/controllers/StorageController.php с методами экшенов для запуска каждого примера, например http://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

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

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

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

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

Yii 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 License

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

Что дальше?

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

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

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

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

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

Advertisement
Advertisement
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.