Générer un lien Amazon S3 expirant - Astuces CSS

Anonim

Vous n'êtes pas obligé de rendre les fichiers sur Amazon S3 publics (ils ne le sont pas par défaut). Mais vous pouvez générer des clés spéciales pour autoriser l'accès aux fichiers privés. Ces clés sont transmises via l'URL et peuvent expirer.

 $blocksize) $key = pack('H*', sha1($key)); $key = str_pad($key, $blocksize, chr(0x00)); $ipad = str_repeat(chr(0x36), $blocksize); $opad = str_repeat(chr(0x5c), $blocksize); $hmac = pack( 'H*', sha1( ($key $opad) . pack( 'H*', sha1( ($key $ipad) . $data )) )); return base64_encode($hmac); ) ) if(!function_exists('el_s3_getTemporaryLink'))( /** * Create temporary URLs to your protected Amazon S3 files. * * @param string $accessKey Your Amazon S3 access key * @param string $secretKey Your Amazon S3 secret key * @param string $bucket The bucket (bucket.s3.amazonaws.com) * @param string $path The target file path * @param int $expires In minutes * @return string Temporary Amazon S3 URL * @see http://awsdocs.s3.amazonaws.com/S3/20060301/s3-dg-20060301.pdf */ function el_s3_getTemporaryLink($accessKey, $secretKey, $bucket, $path, $expires = 5) ( // Calculate expiry time $expires = time() + intval(floatval($expires) * 60); // Fix the path; encode and sanitize $path = str_replace('%2F', '/', rawurlencode($path = ltrim($path, '/'))); // Path for signature starts with the bucket $signpath = '/'. $bucket .'/'. $path; // S3 friendly string to sign $signsz = implode("\n", $pieces = array('GET', null, null, $expires, $signpath)); // Calculate the hash $signature = el_crypto_hmacSHA1($secretKey, $signsz); // Glue the URL… $url = sprintf('http://%s.s3.amazonaws.com/%s', $bucket, $path); //… to the query string… $qs = http_build_query($pieces = array( 'AWSAccessKeyId' => $accessKey, 'Expires' => $expires, 'Signature' => $signature, )); //… and return the URL! return $url.'?'.$qs; ) ) ?>

Usage