s3example - TYPO3 i Amazon S3

Bartosz Aninowski Niedziela, 19 Lipca 2009 13:45 komentarzy: 0

TAGI:amazon, api, s3

Zgodnie z obietnicą w artykule TYPO3, memcache i nginx na amazon EC2, przedstawię wtyczkę do obsługi bazy zdjęć z wykorzystanie usługi Amazon S3. Wtyczka, którą stworzyliśmy może służyć jako podstawa do budowania serwisów z wykorzystaniem CDN Content Distribution Network. W obecnych czasach, gdzie prosty pomysł może przerodzić się w potężny serwis o ogromnym zapotrzebowaniu na serwery i przestrzeń dyskową, warto wiedzieć jak działa S3 i jak skutecznie go wykorzystywać. Rozszerzenie jest napisane zgodnie z paradygmatem MVC, który będzie standardem dla wtyczek w wersji TYPO3 4.3

Wymagania

Niezbędne do zabawy jest posiadanie konta s3. Niestety wymaga to użycia karty kredytowej bo nic nie jest za darmo :). Usługę można uruchomić tu: Amazon Web Services.

Amazon API

Wszystkie usługi Amazon'a posiadają bardzo szczegółową dokumentacją. Opis API s3 można znaleźć pod adresem developer.amazonwebservices.com/connect/entry.jspa. My dla wygody postanowiliśmy zaadoptować klasę napisaną przez Donovana Schönknecht'a, o której więcej można poczytać tutaj. Amazon S3 PHP class posiada wszystko co niezbędne do listowania, dodawania, usuwania plików oraz zarządzania bucketami.

Integracja z TYPO3

W przykładowej wtyczce o nazwie evo_s3_gallery, znajdziesz podstawy użycja s3 API (TER: amazon_s3_api ). Cały kod jest bardzo prosty a my skupiliśmy się jedynie na obsłudze listowania i przesyłania plików.

Listowanie zawartości bucketu:

zaznacz
  1.  
  2. //models/class.tx_s3example_models.php
  3. public function getImagesFromBucket() {
  4.  // to get files list, we must only have bucket name
  5.  $data = $this->s3->getBucket($this->bucketName);
  6.  if (!is_array($data)) return array();
  7.  $returnArray = array();
  8.  foreach ($data as $key => $row) {
  9.  $returnArray[$key] = array();
  10.  //creating the url of image
  11.  $returnArray[$key]['file'] = 'http://'.$this->bucketName.'.s3.amazonaws.com/'.$row['name']; $returnArray[$key]['title'] = $row['name'];
  12.  $returnArray[$key]['size'] = $row['size']/1024;
  13.  $returnArray[$key]['time'] = date("d/m/Y H:i",$row['time']); }
  14.  return $returnArray; }
  15.  

Upload pliku do bucketu:

zaznacz
  1.  
  2. //models/class.tx_s3example_models.php
  3.  public function sendFile($fileSource, $fileName) {
  4.  $this->s3->putBucket($this->bucketName, tx_amazon_s3_api::ACL_PUBLIC_READ);
  5.  return $this->s3->putObjectFile($fileSource, $this->bucketName, $fileName, tx_amazon_s3_api::ACL_PUBLIC_READ); }

Pliki do pobrania:

blog comments powered by Disqus