Generer udløbende Amazon S3 Link - CSS-tricks

Anonim

Du behøver ikke at offentliggøre filer på Amazon S3 (de er ikke som standard). Men du kan generere specielle nøgler for at give adgang til private filer. Disse nøgler sendes gennem URL'en og kan få dem til at udløbe.

 $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; ) ) ?>

Anvendelse