F.Ko-Jiの「一秒後は未来」

AWS SDK for PHPを使ってAmazon S3の有効期限付きURLを生成

Amazon S3 で一定期間だけ有効な URL を生成する仕組みがあるらしいということで調べていました。

» Using Query String Authentication – Amazon Simple Storage Service

通常のオブジェクトの URL に Signature などのパラメータをつけて、プライベートなオブジェクトでも一定期間だけアクセス可能な状態にすることができるという仕組みです。

この Signature 付き URL を生成する方法は「Signing and Authenticating REST Requests – Amazon Simple Storage Service」にあるのですが、公式 SDK を使えば簡単にできるので今回はそっちを使ってみました。なお SDK のバージョンは 1.6 系のほうを使ってます。

» AWS SDK for PHP 1.6.2

ここにサンプル含め使い方が載ってます。

  require_once('sdk.class.php');

  $s3 = new AmazonS3();
  $url = $s3->get_object_url($bucket, $fileName, time() + 180);

  // 「5 minutes」のような指定でもよい
  // $url = $s3->get_object_url($bucket, $fileName, '5 minutes');

get_object_url()の第3引数に URL の有効期限として「UNIXタイムスタンプ」もしくは「strtotime関数が引数に取りうる形式の文字列」を与えると、自動的にクエリ付きの URL を返してくれます。

ところで、URL にアクセスされた際にファイルダウンロードのダイアログを開かせたいという場合もあるかと思いますが、その場合は HTTP ヘッダーをオプションで与えるといけます。

  $s3 = new AmazonS3();
  $opts = array(
    'response' => array(
      'content-disposition' => 'attachment; filename="hoge.mp4"',
      'content-type' => 'application/octet-stream',
    ),
  );
  $url = $s3->get_object_url($bucket, $fileName, '5 minutes', $opts);

このように Content-Disposition ヘッダー等をつけてあげるといいでしょう。

なお、SDKを使う際には config.inc.php を設置しないといけませんが、それについては以下のエントリーのほうで説明してますので分からない場合は参考にしてみてください。

» AWS SDK for PHPを使ってAmazon SESからメール送信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など