AWS S3 iOS オブジェクトリストを取得する

公開: 2014-08-18 11:03
更新: 2016-04-29 06:02

AWS SDK for iOS のバージョン2が出たのでなにか動かしたい気分。
今回はバケットからPrefixを指定したオブジェクトのリストを取得してみたいと思います。



まずはSDKをダウンロードするか
https://github.com/aws/aws-sdk-ios-v2


今回からCocoaPodsにも対応しているので、次のようにPodfileに入力してインストール。

pod 'AWSiOSSDKv2'

バージョンは2.0.7を使用しているので
なんか上手く行かないような場合は

pod 'AWSiOSSDKv2', '2.0.7'

と指定してやってみてくださいな。



ではでは、さっそくバケットからオブジェクトのリストを取得する関数を用意してみましょう。
#import "MYClass.h"
#import "S3.h"

@implementation MYClass

NSString * const AWS_KEY = @"YOURAWSKEY";
NSString * const AWS_SECRET = @"YOURAWSSECRET";
NSString * const S3_BUCKET = @"your-bucket";

-(void)getS3ObjectsWithPrefix:(NSString*)prefix callback:(void (^)(NSArray *))callback
{
        //AWSのリージョン 東京の場合はこれ
        AWSRegionType region = AWSRegionAPNortheast1;
        
        //AWSS3を用意
        AWSStaticCredentialsProvider *provider = [AWSStaticCredentialsProvider credentialsWithAccessKey:AWS_KEY secretKey:AWS_SECRET];
        AWSServiceConfiguration *config = [AWSServiceConfiguration configurationWithRegion:region credentialsProvider:provider];
        AWSS3 *s3 = [[AWSS3 alloc] initWithConfiguration:config];
        
        //リクエストの生成
        AWSS3ListObjectsRequest *listRequest = [[AWSS3ListObjectsRequest alloc] init];
        listRequest.bucket = S3_BUCKET;
        listRequest.prefix = prefix;
        //self.listRequest = listRequest; //途中でキャンセルとか入れたかったらプロパティに持つと便利

        //リクエストをコール
        [[s3 listObjects:listRequest] continueWithBlock:^id(BFTask *task) {
                if (task.isCancelled) {
                        //キャンセルが呼ばれたとき
                } else if (task.error) {
                        //エラーが発生したとき
                } else {
                        //取得成功
                        AWSS3ListObjectsOutput *result = task.result;
                        callback(result.contents);
                }
                return nil;
        }];
}

こんな感じ。
AWS_KEYとAWS_SECRET、S3_BUCKETに自分のを入れてください。



この関数を使って、ためしにimage/以下のオブジェクトを取得してみます。

-(void)hoge
{
        MYClass *m = [[MYClass alloc] init];
        NSString *prefix = @"image/";
        [m getS3ObjectsWithPrefix:prefix callback:^(NSArray *objects) {
                for(AWSS3Object* obj in objects) {
                        NSLog(@"key:%@, size:%@", obj.key, obj.size);
                }
        }];
}
結果
key:image/apple.jp, size:733752
key:image/banana.jp, size:383594
key:image/sub/apple_icon.png, size:177875
...

うむ。よさげですね。
次回はkeyを指定したオブジェクトのダウンロードをやります。
⇒ AWS S3 iOS オブジェクトのダウンロード

ではでは。



この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。