ユーザ用ツール

サイト用ツール


amazon_s3のワンタイムurl

Amazon S3のワンタイムURL

Amazon S3とは? 「Amazon S3(Amazon Simple Storage Sercice)」って?

<?php 
  
class S3Download { 
  
    public function generateOnetimeURL($bucketName, $objectName) { 
  
        if (empty($bucketName)) { 
            die("バケット名が空です"); 
        } 
  
        if (empty($objectName)) { 
            die("ダウンロードするファイル名が空です"); 
        } 
  
        // AWSのACCESSKEY 
        $keyId = 'AWS_ACCESS_KEY'; 
        // AWSのSECRETKEY 
        $secretKey = 'AWS_SECRET_KEY'; 
        $request = $this->_makeRequestHeader($bucketName, "/".$bucketName."/".$objectName, $keyId, $secretKey); 
        $qs = http_build_query($request["header"]); 
        $url = sprintf('https://%s.s3.amazonaws.com/%s', $bucketName, $objectName); 
  
        return $url."?".$qs;
    } 
  
    private function _makeRequestHeader($bucketName, $resource, $accessKey="", $secretKey="") { 
  
        $httpVerb = 'GET' . "\n"; 
        $contentMd5 = "\n"; 
        $contentType = "\n"; 
  
        // Expireする分設定 
        // 5分を設定した 
  
        $expires = time() + intval(5) * 60; 
        $expires_str = $expires . "\n";
        $canonicalizedAmzHeaders = '';  
        $canonicalizedResource = $resource; 
        $stringToSign = $httpVerb . $contentMd5 . $contentType . $expires_str
                . $canonicalizedAmzHeaders . $canonicalizedResource;
        $hash = hash_hmac('sha1', $stringToSign, $secretKey, true); 
        $signature = base64_encode($hash); 
  
        $request = array("header" => 
            array( 
                "Expires" => $expires, 
                "AWSAccessKeyId" => $accessKey, 
                "Signature" => $signature, 
            ), 
        ); 
  
        return $request; 
    } 
  
} 
  
$s3obj = new S3Download(); 
// s3testhogeバケット直下のhoge.zipをダウンロードするURL生成 
$s3obj->generateOnetimeURL('s3testhoge','hoge.zip'); 
// ファイルがサブディレクトリ(正確には違うが…)に入ってる場合 
$s3obj->generateOnetimeURL('s3testhoge','hoge/fuga/foobar.zip'); 

また アップロード、ダウンロード、オブジェクトの一覧を表示するサンプルコードです。

<?phpの

/ **
 * ライブラリを読み込んで初期化します。
 * /
require_onceを 'AWSSDKforPHP / sdk.class.php';
$ s3を=新しいAmazonS3(配列(
                       'key' => 'AWSアクセスキーIDを書く',
                       'secret' => 'AWSシークレットキーを書く',
));

$ = "私-samle"バケツ;

// オブジェクト(ファイル)をアップロードします。
$応答= $ S3-> CREATE_OBJECT($バケツ、の "foo / test.txtの"配列(
                                   "ファイルアップロード" => "/tmp/hello.txt」、
                                   "のacl" => AmazonS3 :: ACL_PRIVATE、
                                   "のContentType" => "text / plainの"
                                   ));

もし($対応 - > ISOK()){
    「OK \ n "をエコー;
}他{
    「NGは\ n "エコー;
}

// 同じファイルを別名でアップロードします。
$応答= $ S3-> CREATE_OBJECT($バケツ、の "foo /日本語の.txt"、配列(
                                   "ファイルアップロード" => "/tmp/hello.txt」、
                                   "のacl" => AmazonS3 :: ACL_PRIVATE、
                                   "のContentType" => "text / plainの"
                                   ));


もし($対応 - > ISOK()){
    「OK \ n "をエコー;
}他{
    「NGは\ n "エコー;
}

//S3上のオブジェクトをローカルにダウンロード
$応答= $ S3-> GET_OBJECT($バケット、の 'foo / test.txtの'、配列(
                                 'FileDownloadが' => '/tmp/downloaded.txt'
));
もし($対応 - > ISOK()){
    「OK \ n "をエコー;
}他{
    「NGは\ n "エコー;
}


//S3上のオブジェクトを取得して変数に保持
$応答= $ S3-> GET_OBJECT($バケット、の 'foo /日本語の.txt'、配列(
                                ));
もし($対応 - > ISOK()){
    「OK \ n "をエコー;
}他{
    「NGは\ n "エコー;
}

//オブジェクトの中身を表示
"====ボディ====する\ n"エコー。$対応 - >ボディ。「============た\ n ";

//アップ済みオブジェクトのリストを取得
$応答= $ S3-> LIST_OBJECTS($バケット配列(
                                  'プレフィックス' => 'fooは/'、
                                  ));

$ = $対応 - >ボディ - >目次オブジェクト;

// $objectsはCFSimpleXMLクラスのインスタンス。
// Compositeパターンになっている。

($ CFSimpleXMLのinstanceofオブジェクト)をアサート;

foreachの($ objはオブジェクトとして$){
    (CFSimpleXML instanceofを$ obj)は断言する。
    ますvar_dump($ obj)は;
}
amazon_s3のワンタイムurl.txt · 最終更新: 2014/10/21 15:58 by luis_lee