制限付きURLを発行しS3からファイルをダウンロードしてみる
CloudデザインパターンのPrivate DistributionパターンをJavaで作る際のメモ
CDP:Private Distributionパターン - AWS-CloudDesignPattern
AWSCredentials cre = new BasicAWSCredentials(【AWSアクセスキー】, 【AWSシークレットキー】); AmazonS3Client client = new AmazonS3Client(cre); // ダウンロードしたいファイルを指定 String bucketName = "【バケット名】"; String key = "【バケット配下のパス】【ファイル名】"; // 有効期限(ここでは1分) Calendar cal = Calendar.getInstance(); cal.add(Calendar.MINUTE, 1); Date limit = cal.getTime(); // URLを生成 URL url = client.generatePresignedUrl(new GeneratePresignedUrlRequest( bucketName, key).withExpiration(limit)); // 生成したURLに対してHttpClientでGETする DefaultHttpClient httpclient = new DefaultHttpClient(); HttpGet request = new HttpGet(url.toURI()); HttpResponse response = httpclient.execute(request); // ファイルをローカルに出力 System.out.println(response.getStatusLine()); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { FileOutputStream fos = new FileOutputStream( "src/main/resources/output/" + FilenameUtils.getName(key)); IOUtils.copy(response.getEntity().getContent(), fos); }
有効期限はGETリクエストの送信までの時間をセットする必要があるようで
有効期限が切れたリンクでは(HTTP/1.1 403 Forbidden)が返ります
生成されるURL
https://【バケット名】.s3.amazonaws.com/【バケット配下のパス】【ファイル名】 ?Expires=1347518831 &AWSAccessKeyId=【AWSアクセスキー】 &Signature=zxM%2FZIzyq%2BrkvWVeKfUnDfDWucs%3D
有効期限(Expires)の単位は秒。有効期限を指定しないで生成すると900秒の設定となる
900秒より大きい値を指定したい場合は有効期限を指定すればOK