s3example – TYPO3 i Amazon 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 http://developer.amazonwebservices.com/connect/entry.jspa?externalID=123. 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:
-
public function getImagesFromBucket()
-
{
-
// to get files list, we must only have bucket name
-
$data = $this->s3->getBucket($this->bucketName);
-
if (!is_array($data)) return array();
-
$returnArray = array();
-
foreach ($data as $key => $row)
-
{
-
$returnArray[$key] = array();
-
//creating the url of image
-
$returnArray[$key]['file'] = 'http://'.$this->bucketName.'.s3.amazonaws.com/'.$row['name'];
-
$returnArray[$key]['title'] = $row['name'];
-
$returnArray[$key]['size'] = $row['size']/1024;
-
$returnArray[$key]['time'] = date("d/m/Y H:i",$row['time']);
-
-
}
-
return $returnArray;
-
}
Upload pliku do bucketu:
-
public function sendFile($fileSource, $fileName)
-
{
-
$this->s3->putBucket($this->bucketName, tx_amazon_s3_api::ACL_PUBLIC_READ);
-
return $this->s3->putObjectFile($fileSource, $this->bucketName, $fileName, tx_amazon_s3_api::ACL_PUBLIC_READ);
-
}
Pliki do pobrania:
Najnowsze komentarze