Changeset 38608 in spip-zone for _plugins_/stockageS3


Ignore:
Timestamp:
Jun 5, 2010, 6:16:37 PM (10 years ago)
Author:
fil@…
Message:

on passe les fonctions specifiques a S3 dans inc/s3.php, et la logique spip dans l'action + tentative d'utiliser l'API sur archive.org (n'ai pas reussi...)

Location:
_plugins_/stockageS3
Files:
2 added
5 edited

Legend:

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

    r38566 r38608  
    2121                ){
    2222
    23                 $cfg = @unserialize($GLOBALS['meta']['stockage']);
    24                 if (strlen($cfg['s3publickey'])
    25                   AND strlen($cfg['s3secretkey'])
    26                   AND strlen($cfg['s3bucket'])) {
     23                include_spip('inc/s3');
    2724
    28                         $BUCKET = $cfg['s3bucket'];
    29                         $PATH = $cfg['s3path'] ? $cfg['s3path'].'/' : '';
    30                         $LOCATION = $cfg['location'];
    3125
    32                         switch ($cfg['provider']) {
    33                                 case 'gs':
    34                                         define('S3_DEFAULT_URL', 'commondatastorage.googleapis.com');
    35                                         break;
    36                                 case 's3':
    37                                 default:
    38                                         define('S3_DEFAULT_URL', 's3.amazonaws.com');
    39                                         break;
    40                         }
     26                include_spip('inc/documents');
     27                include_spip('inc/distant');
    4128
    42                         // charger la librairie Amazon S3
    43                         // http://code.google.com/p/php-aws/source
    44                         include_spip('lib/S3');
    45                         $s3 = new S3($cfg['s3publickey'], $cfg['s3secretkey'], $useSSL = false, S3_DEFAULT_URL);
     29                // Size image, for future thumbnails. Now set "original"
     30                $size_image= "original";
    4631
    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)) {
    51                                         echo ("Something went wrong! We couldn't create a new bucket for ".htmlspecialchars($BUCKET)."!");
    52                                         var_dump($s3->listBuckets());
    53                                         exit;
    54                                 }
    55                         }
     32                // Ou doit-on deposer notre fichier ?
     33                $path_info = pathinfo(get_spip_doc($t['fichier']));
    5634
    57                         include_spip('inc/documents');
    58                         include_spip('inc/distant');
    59                        
    60                         // Size image, for future thumbnails. Now set "original"                       
    61                         $size_image= "original";
     35                $src_site =  $GLOBALS['meta']['adresse_site']. "/" .substr(get_spip_doc($t['fichier']),strlen(_DIR_RACINE));
     36                $src =  get_spip_doc($t['fichier']);
     37                $dest =  $PATH . $size_image. "-id" .$id_document. "-" .time(). "." .$path_info['extension'];
    6238
    63                         // Ou doit-on deposer notre fichier ?
    64                         $path_info = pathinfo(get_spip_doc($t['fichier']));
    65                        
    66                         $src_site =  $GLOBALS['meta']['adresse_site']. "/" .substr(get_spip_doc($t['fichier']),strlen(_DIR_RACINE));
    67                         $src =  get_spip_doc($t['fichier']);
    68                         $dest =  $PATH . $size_image. "-id" .$id_document. "-" .time(). "." .$path_info['extension'];
     39                if ($s3_url = stockage_sendfile(get_spip_doc($t['fichier']), $dest)) {
     40                        spip_log("Stockage document $id_document ".$t['fichier']." => ".$s3_url, 'stockage');
     41                        $url_distante = $s3_url;
     42                        include_spip('action/editer_document');
    6943
    70                         // on l'envoie
    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;
    73 
    74                                 spip_log("Stockage document $id_document ".$t['fichier']." => ".$s3_url, 'stockage');
    75                                 $url_distante = $s3_url;
    76                                 include_spip('action/editer_document');
    77 
    78                                 rename (get_spip_doc($t['fichier']), _DIR_RACINE.fichier_copie_locale($url_distante));
    79                                 document_set($id_document, array(
    80                                         'fichier' => $url_distante,
    81                                         'distant' => 'oui'
    82                                 ));
    83                                 //echo "<br><br>$src => $url_distante => ../".fichier_copie_locale($url_distante);
    84                         } else {
    85                                 spip_log("Erreur upload stockage ($id_document)", 'stockage');
    86                         }
    87                 }
     44                        rename (get_spip_doc($t['fichier']), _DIR_RACINE.fichier_copie_locale($url_distante));
     45                        document_set($id_document, array(
     46                                'fichier' => $url_distante,
     47                                'distant' => 'oui'
     48                        ));
     49                } else
     50                        spip_log("Erreur upload stockage ($id_document)", 'stockage');
    8851        }
    89 
    9052}
    9153
  • _plugins_/stockageS3/fonds/cfg_stockage.html

    r38553 r38608  
    11[(#REM) titre=Gestion Documents Stockage]
    22[(#REM) autoriser=webmestre ]
    3 
    43
    54<!-- descriptif=
     
    2019
    2120<select name="provider">
    22         <option value="s3">Amazon S3</option>
    23         <option value="gs"[
     21        <option value="amazon">Amazon S3</option>
     22        <option value="google"[
    2423                (#ENV{provider}|=={gs}|?{selected="selected"})
    2524                ]>Google Storage</option>
     25<!--    <option value="archiveorg"[
     26                (#ENV{provider}|=={archiveorg}|?{selected="selected"})
     27                ]>archive.org</option> -->
    2628</select>
    2729
     
    6567<br />
    6668<select name="s3baseurl">
    67         <option value="">http://commondatastorage.googleapis.com/[(#ENV{s3bucket}|sinon{$bucket$})][/(#ENV{s3path})]/</option>
     69        <option value="">[http://(#ENV{provider}|s3_endpoint)/][(#ENV{s3bucket}|sinon{$bucket$})][/(#ENV{s3path})]/</option>
    6870[
    6971        <option value="http://(#ENV{s3bucket})/"[
  • _plugins_/stockageS3/lib/S3.php

    r38566 r38608  
    4747
    4848        public static $useSSL = true;
     49        public static $endpoint;
    4950
    5051        private static $__accessKey; // AWS Access key
     
    6465                        self::setAuth($accessKey, $secretKey);
    6566                self::$useSSL = $useSSL;
    66                 define('S3_ENDPOINT', $endpoint);
     67                self::$endpoint = $endpoint;
    6768        }
    6869
     
    8889        */
    8990        public static function listBuckets($detailed = false) {
    90                 $rest = new S3Request('GET', '', '');
     91                $rest = new S3Request('GET', '', '', self::$endpoint);
    9192                $rest = $rest->getResponse();
    9293                if ($rest->error === false && $rest->code !== 200)
     
    130131        */
    131132        public static function getBucket($bucket, $prefix = null, $marker = null, $maxKeys = null, $delimiter = null, $returnCommonPrefixes = false) {
    132                 $rest = new S3Request('GET', $bucket, '');
     133                $rest = new S3Request('GET', $bucket, '', self::$endpoint);
    133134                if ($prefix !== null && $prefix !== '') $rest->setParameter('prefix', $prefix);
    134135                if ($marker !== null && $marker !== '') $rest->setParameter('marker', $marker);
     
    170171                if ($maxKeys == null && $nextMarker !== null && (string)$response->body->IsTruncated == 'true')
    171172                do {
    172                         $rest = new S3Request('GET', $bucket, '');
     173                        $rest = new S3Request('GET', $bucket, '', self::$endpoint);
    173174                        if ($prefix !== null && $prefix !== '') $rest->setParameter('prefix', $prefix);
    174175                        $rest->setParameter('marker', $nextMarker);
     
    210211        */
    211212        public static function putBucket($bucket, $acl = self::ACL_PRIVATE, $location = false) {
    212                 $rest = new S3Request('PUT', $bucket, '');
     213                $rest = new S3Request('PUT', $bucket, '', self::$endpoint);
    213214                $rest->setAmzHeader('x-amz-acl', $acl);
    214215
     
    243244        */
    244245        public static function deleteBucket($bucket) {
    245                 $rest = new S3Request('DELETE', $bucket);
     246                $rest = new S3Request('DELETE', $bucket, '', self::$endpoint);
    246247                $rest = $rest->getResponse();
    247248                if ($rest->error === false && $rest->code !== 204)
     
    306307        public static function putObject($input, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array()) {
    307308                if ($input === false) return false;
    308                 $rest = new S3Request('PUT', $bucket, $uri);
     309                $rest = new S3Request('PUT', $bucket, $uri, self::$endpoint);
    309310
    310311                if (is_string($input)) $input = array(
     
    409410        */
    410411        public static function getObject($bucket, $uri, $saveTo = false) {
    411                 $rest = new S3Request('GET', $bucket, $uri);
     412                $rest = new S3Request('GET', $bucket, $uri, self::$endpoint);
    412413                if ($saveTo !== false) {
    413414                        if (is_resource($saveTo))
     
    441442        */
    442443        public static function getObjectInfo($bucket, $uri, $returnInfo = true) {
    443                 $rest = new S3Request('HEAD', $bucket, $uri);
     444                $rest = new S3Request('HEAD', $bucket, $uri, self::$endpoint);
    444445                $rest = $rest->getResponse();
    445446                if ($rest->error === false && ($rest->code !== 200 && $rest->code !== 404))
     
    467468        */
    468469        public static function copyObject($srcBucket, $srcUri, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array()) {
    469                 $rest = new S3Request('PUT', $bucket, $uri);
     470                $rest = new S3Request('PUT', $bucket, $uri, self::$endpoint);
    470471                $rest->setHeader('Content-Length', 0);
    471472                foreach ($requestHeaders as $h => $v) $rest->setHeader($h, $v);
     
    531532                $dom->appendChild($bucketLoggingStatus);
    532533
    533                 $rest = new S3Request('PUT', $bucket, '');
     534                $rest = new S3Request('PUT', $bucket, '', self::$endpoint);
    534535                $rest->setParameter('logging', null);
    535536                $rest->data = $dom->saveXML();
     
    558559        */
    559560        public static function getBucketLogging($bucket) {
    560                 $rest = new S3Request('GET', $bucket, '');
     561                $rest = new S3Request('GET', $bucket, '', self::$endpoint);
    561562                $rest->setParameter('logging', null);
    562563                $rest = $rest->getResponse();
     
    594595        */
    595596        public static function getBucketLocation($bucket) {
    596                 $rest = new S3Request('GET', $bucket, '');
     597                $rest = new S3Request('GET', $bucket, '', self::$endpoint);
    597598                $rest->setParameter('location', null);
    598599                $rest = $rest->getResponse();
     
    650651                $dom->appendChild($accessControlPolicy);
    651652
    652                 $rest = new S3Request('PUT', $bucket, $uri);
     653                $rest = new S3Request('PUT', $bucket, $uri, self::$endpoint);
    653654                $rest->setParameter('acl', null);
    654655                $rest->data = $dom->saveXML();
     
    675676        */
    676677        public static function getAccessControlPolicy($bucket, $uri = '') {
    677                 $rest = new S3Request('GET', $bucket, $uri);
     678                $rest = new S3Request('GET', $bucket, $uri, self::$endpoint);
    678679                $rest->setParameter('acl', null);
    679680                $rest = $rest->getResponse();
     
    731732        */
    732733        public static function deleteObject($bucket, $uri) {
    733                 $rest = new S3Request('DELETE', $bucket, $uri);
     734                $rest = new S3Request('DELETE', $bucket, $uri, self::$endpoint);
    734735                $rest = $rest->getResponse();
    735736                if ($rest->error === false && $rest->code !== 204)
     
    758759                $uri = str_replace('%2F', '/', rawurlencode($uri)); // URI should be encoded (thanks Sean O'Dea)
    759760                return sprintf(($https ? 'https' : 'http').'://%s/%s?AWSAccessKeyId=%s&Expires=%u&Signature=%s',
    760                 $hostBucket ? $bucket : $bucket.'.'.S3_ENDPOINT, $uri, self::$__accessKey, $expires,
     761                $hostBucket ? $bucket : $bucket.'.'. self::$endpoint , $uri, self::$__accessKey, $expires,
    761762                urlencode(self::__getHash("GET\n\n\n{$expires}\n/{$bucket}/{$uri}")));
    762763        }
     
    829830                self::$useSSL = true; // CloudFront requires SSL
    830831                $rest = new S3Request('POST', '', '2008-06-30/distribution', 'cloudfront.amazonaws.com');
    831                 $rest->data = self::__getCloudFrontDistributionConfigXML($bucket.'.'.S3_ENDPOINT, $enabled, $comment, (string)microtime(true), $cnames);
     832                $rest->data = self::__getCloudFrontDistributionConfigXML($bucket.'.'. self::$endpoint , $enabled, $comment, (string)microtime(true), $cnames);
    832833                $rest->size = strlen($rest->data);
    833834                $rest->setHeader('Content-Type', 'application/xml');
     
    11281129        public $fp = false, $size = 0, $data = false, $response;
    11291130
     1131        public static $endpoint='';
    11301132
    11311133        /**
     
    11371139        * @return mixed
    11381140        */
    1139         function __construct($verb, $bucket = '', $uri = '') {
     1141        function __construct($verb, $bucket = '', $uri = '', $endpoint='') {
    11401142                $this->verb = $verb;
     1143
     1144                self::$endpoint = $endpoint;
    11411145                $this->bucket = strtolower($bucket);
    11421146                $this->uri = $uri !== '' ? '/'.str_replace('%2F', '/', rawurlencode($uri)) : '/';
    11431147
    11441148                if ($this->bucket !== '') {
    1145                         $this->headers['Host'] = $this->bucket.'.'.S3_ENDPOINT;
     1149                        $this->headers['Host'] = $this->bucket.'.'.self::$endpoint;
    11461150                        $this->resource = '/'.$this->bucket.$this->uri;
    11471151                } else {
    1148                         $this->headers['Host'] = S3_ENDPOINT;
     1152                        $this->headers['Host'] = self::$endpoint;
    11491153                        //$this->resource = strlen($this->uri) > 1 ? '/'.$this->bucket.$this->uri : $this->uri;
    11501154                        $this->resource = $this->uri;
  • _plugins_/stockageS3/plugin.xml

    r35515 r38608  
    2020                <inclure>stockageS3_pipeline.php</inclure>
    2121        </pipeline>
     22        <fonctions>inc/s3.php</fonctions>
    2223        <necessite id="SPIP" version="[2.0.10;]" />
    2324        <necessite id="gestdoc" version="[1.2.0;]" />
  • _plugins_/stockageS3/stockageS3_pipeline.php

    r38553 r38608  
    88function stockageS3_actif(){
    99        $cfg = @unserialize($GLOBALS['meta']['stockage']);
    10 
    11         $providers = array('' => 'Amazon S3', 's3' => 'Amazon S3', 'gs' => 'Google Storage');
    12 
    1310        if (strlen($cfg['s3publickey'])
    1411        AND strlen($cfg['s3secretkey'])
     
    1613        )
    1714                return
    18                         $providers[$cfg['provider']];
     15                        s3_provider($cfg['provider']);
    1916        return false;
    2017}
    2118
    2219function stockageS3_document_desc_actions($flux){
     20        include_spip('inc/s3');
    2321        if ($id_document = intval($flux['args']['id_document'])
    2422                AND $s = stockageS3_actif()){
     
    2927
    3028function stockageS3_editer_document_actions($flux){
     29        include_spip('inc/s3');
     30
    3131        if ($id_document = intval($flux['args']['id_document'])
    3232                AND $s = stockageS3_actif()
Note: See TracChangeset for help on using the changeset viewer.