Changeset 38566 in spip-zone for _plugins_/stockageS3


Ignore:
Timestamp:
Jun 3, 2010, 12:15:06 PM (10 years ago)
Author:
fil@…
Message:

patch rapide de la librairie s3-php pour fonctionner avec Google Storage

Location:
_plugins_/stockageS3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/stockageS3/action/stockageS3_envoyer.php

    r38553 r38566  
    99
    1010function action_stockageS3_envoyer_dist($arg=null) {
     11
    1112        if (is_null($arg)){
    1213                $securiser_action = charger_fonction('securiser_action','inc');
     
    4142                        // charger la librairie Amazon S3
    4243                        // http://code.google.com/p/php-aws/source
    43                         require_once find_in_path('cloudfusion/cloudfusion.class.php');                 
    44                         $s3 = new AmazonS3($cfg['s3publickey'], $cfg['s3secretkey']);
     44                        include_spip('lib/S3');
     45                        $s3 = new S3($cfg['s3publickey'], $cfg['s3secretkey'], $useSSL = false, S3_DEFAULT_URL);
    4546
    46                         // Creer le bucket s'il n'existe pas deja
    47                         if (!$s3->if_bucket_exists($BUCKET)) {
    48                                 if (!$s3->create_bucket($BUCKET, $LOCATION)) {
     47                        // Creer le bucket (en mode public) s'il n'existe pas deja
     48                        if (!$buckets = $s3->listBuckets()
     49                        OR !in_array($BUCKET, $buckets)) {
     50                                if (!$s3->putbucket($BUCKET, S3::ACL_PUBLIC_READ, $LOCATION)) {
    4951                                        echo ("Something went wrong! We couldn't create a new bucket for ".htmlspecialchars($BUCKET)."!");
    50                                         var_dump($s3->getBuckets());
     52                                        var_dump($s3->listBuckets());
    5153                                        exit;
    5254                                }
     
    5658                        include_spip('inc/distant');
    5759                       
    58                         //Size image, for future thumbnails. Now set "original"                 
     60                        // Size image, for future thumbnails. Now set "original"                       
    5961                        $size_image= "original";
    6062
     
    6769
    6870                        // on l'envoie
    69                         if ($s3_url = $s3->store_remote_file($src_site, $BUCKET, $dest)) {
    70 
    71                                 // gs est gentil mais il passe en https
    72                                 $s3_url = preg_replace(',^https,', 'http', $s3_url);
    73                                 // gs est gentil mais il transforme / en %2F
    74                                 $s3_url = str_replace('%2F', '/', $s3_url);
     71                        if ($s3->putObjectFile(get_spip_doc($t['fichier']), $BUCKET, $dest, $acl = S3::ACL_PUBLIC_READ /*, $metaHeaders = array(), $contentType = 'image/jpeg' */)) {
     72                                $s3_url = 'http://'.$BUCKET.'.'.S3_DEFAULT_URL.'/'.$dest;
    7573
    7674                                spip_log("Stockage document $id_document ".$t['fichier']." => ".$s3_url, 'stockage');
    7775                                $url_distante = $s3_url;
    7876                                include_spip('action/editer_document');
     77
    7978                                rename (get_spip_doc($t['fichier']), _DIR_RACINE.fichier_copie_locale($url_distante));
    8079                                document_set($id_document, array(
  • _plugins_/stockageS3/lib/S3.php

    r38565 r38566  
    11<?php
     2/*
     3 * Original URL http://code.google.com/p/amazon-s3-php-class/
     4 */
     5
    26/**
    37* $Id: S3.php 47 2009-07-20 01:25:40Z don.schonknecht $
     
    5660        * @return void
    5761        */
    58         public function __construct($accessKey = null, $secretKey = null, $useSSL = true) {
     62        public function __construct($accessKey = null, $secretKey = null, $useSSL = true, $endpoint='s3.amazonaws.com') {
    5963                if ($accessKey !== null && $secretKey !== null)
    6064                        self::setAuth($accessKey, $secretKey);
    6165                self::$useSSL = $useSSL;
     66                define('S3_ENDPOINT', $endpoint);
    6267        }
    6368
     
    753758                $uri = str_replace('%2F', '/', rawurlencode($uri)); // URI should be encoded (thanks Sean O'Dea)
    754759                return sprintf(($https ? 'https' : 'http').'://%s/%s?AWSAccessKeyId=%s&Expires=%u&Signature=%s',
    755                 $hostBucket ? $bucket : $bucket.'.s3.amazonaws.com', $uri, self::$__accessKey, $expires,
     760                $hostBucket ? $bucket : $bucket.'.'.S3_ENDPOINT, $uri, self::$__accessKey, $expires,
    756761                urlencode(self::__getHash("GET\n\n\n{$expires}\n/{$bucket}/{$uri}")));
    757762        }
     
    824829                self::$useSSL = true; // CloudFront requires SSL
    825830                $rest = new S3Request('POST', '', '2008-06-30/distribution', 'cloudfront.amazonaws.com');
    826                 $rest->data = self::__getCloudFrontDistributionConfigXML($bucket.'.s3.amazonaws.com', $enabled, $comment, (string)microtime(true), $cnames);
     831                $rest->data = self::__getCloudFrontDistributionConfigXML($bucket.'.'.S3_ENDPOINT, $enabled, $comment, (string)microtime(true), $cnames);
    827832                $rest->size = strlen($rest->data);
    828833                $rest->setHeader('Content-Type', 'application/xml');
     
    11321137        * @return mixed
    11331138        */
    1134         function __construct($verb, $bucket = '', $uri = '', $defaultHost = 's3.amazonaws.com') {
     1139        function __construct($verb, $bucket = '', $uri = '') {
    11351140                $this->verb = $verb;
    11361141                $this->bucket = strtolower($bucket);
     
    11381143
    11391144                if ($this->bucket !== '') {
    1140                         $this->headers['Host'] = $this->bucket.'.'.$defaultHost;
     1145                        $this->headers['Host'] = $this->bucket.'.'.S3_ENDPOINT;
    11411146                        $this->resource = '/'.$this->bucket.$this->uri;
    11421147                } else {
    1143                         $this->headers['Host'] = $defaultHost;
     1148                        $this->headers['Host'] = S3_ENDPOINT;
    11441149                        //$this->resource = strlen($this->uri) > 1 ? '/'.$this->bucket.$this->uri : $this->uri;
    11451150                        $this->resource = $this->uri;
     
    12971302                // Parse body into XML
    12981303                if ($this->response->error === false && isset($this->response->headers['type']) &&
    1299                 $this->response->headers['type'] == 'application/xml' && isset($this->response->body)) {
     1304                preg_match(',application/xml,', $this->response->headers['type']) && isset($this->response->body)) {
    13001305                        $this->response->body = simplexml_load_string($this->response->body);
    13011306
Note: See TracChangeset for help on using the changeset viewer.