3

私の人生では、私のiOSプロジェクトにAmazonのSDKを実装する方法を理解することはできません.私がやろうとしていることに関する多くのドキュメントを見つけることができないようです.

非常に単純に、Amazon S3 アカウントからファイルをダウンロードし、iPhone にローカルに保存したい... http アドレスを介して画像にアクセスすることでそれを行うことができますが、それは私が好むように画像を保護しません。

私が読んだことから、私は次のようなことをしているはずです:

AmazonS3Client *s3Client = [[AmazonS3Client alloc] initWithAccessKey:@"mykey" withSecretKey:@"mysecretkey"];

        S3GetObjectRequest *requestedObject = [[S3GetObjectRequest alloc] initWithKey:bucketPath withBucket:@"mybucket"];

        NSLog(@"requestedobject:%@", requestedObject - I get the log here);

        S3GetObjectResponse *getObjectResponse = [s3Client getObject:requestedObject];

        NSLog(@"requestedobject2:%@", getObjectResponse - it crashes before this happens);
        NSData *myData2;
        myData2 = getObjectResponse.body;
        [myData2 writeToFile:bucketPath atomically:YES];

私は明らかにgetObjectResponse、getObjectコードで何か間違ったことをしていますが、正しい構文を理解することはできません...どんな助けも感謝します!

ログは次のとおりです: 2012-08-02 17:12:33.856 コレクション マスター エディション[13176:4e07] 要求されたオブジェクト: 2012-08-02 17:12:34.044 コレクション マスター エディション[13176:4e07] *キャッチされない例外によるアプリの終了「AmazonServiceException」、理由:「(null)」

たぶん、次のコードでバケットリストの内容を取得できることにも言及する必要があります

 S3ListObjectsRequest *listObjectRequest = [[S3ListObjectsRequest alloc] initWithName:@"my bucket"];

        S3ListObjectsResponse *listObjectResponse = [s3Client listObjects:listObjectRequest];

        S3ListObjectsResult *listObjectsResults = listObjectResponse.listObjectsResult;

        for (S3ObjectSummary *objectSummary in listObjectsResults.objectSummaries) {

            NSLog(@"Bucket Contents:%@" ,[objectSummary key]); // This returns the contents of the bucket

        }

ありがとう!ザック

4

3 に答える 3

1

私がここで見たものから、あなたは2つの問題のうちの1つを持っているかもしれません。AWSを最初に使い始めたときも、同様の問題がありました。まず、バケット名がすべて小文字であることを確認してください。@try-@catchブロックに入れてエラーをログに記録することで、これが発生している理由を確認する必要があります。これにより、問題を把握する際の詳細がわかります。

    -(UIImage *)getImageFromS3{      


    @try{
    AmazonS3Client *_s3Client = [[AmazonS3Client alloc]initWithAccessKey:ACCESS_KEY withSecretKey:SECRET_KEY];      

    S3GetObjectRequest *getObjectRequest = [[S3GetObjectRequest alloc]initWithKey:imageKey withBucket:pictureBucket];

  S3GetObjectResponse *response = [_s3Client getObject:getObjectRequest];

    if (response.error == nil)
    {
        if (response.body != nil)
        {
        UIImage *someImage = [UIImage imageWithData:reponse.body];
    return someImage;
        }
        else{
            NSLog(@"There was no value in the response body");
            return nil;
             }
    }
    else if (response.error != nil)
    {
        NSLog(@"There was an error in the response while getting image: %@",response.error.description);
    }
}

    @catch (NSException *exception) {
    NSLog(@"There was an exception when connecting to s3: %@",exception.description);
}

} 
于 2013-03-17T03:03:57.580 に答える