2012-02-24 17 views
0

イメージをAmazon S3にアップロードし、そのファイルのリンクを取得しようとしています(amazon s3用のASIHTTPRequestの使用)。今の私は(私の質問は、コードに実際にある)次のことを行っている:amazon s3にファイルをアップロードしてリンクを取得する方法は?

- (void) uploadAnImageToS3 { 
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
     [ASIS3Request setSharedSecretAccessKey:@"*****here I put my secretkey*****"]; 
     [ASIS3Request setSharedAccessKey:@"*****here I put my key*****"]; 
     NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(self.imageToPost)]; 
     NSString * key = @"aKey" 
     ASIS3ObjectRequest *request = [ASIS3ObjectRequest PUTRequestForData:imageData withBucket:@"theBucketName" key:key]; 
     [request setShouldCompressRequestBody:YES]; 
     [request startSynchronous]; 


     if (![request error]) { 
      //Here I should share a link for the put file, how do I get it? Is there any response from s3? 
     } 
     else { 
      NSLog(@"%@",[[request error] localizedDescription]); 
     } 
    [self performSelectorOnMainThread:@selector(stopActivity) withObject:self waitUntilDone:YES]; 
    [pool release]; 
} 

I can't figure out why respString content is not accessible

答えて

6

オーケー、私はそれを自分で行うことができた:) まずあなたはPUTリクエスト

requestForPUTSmth.accessPolicy = ASIS3AccessPolicyPublicReadWriteの財産であるアクセスポリシーを設定する必要があります。

ファイルのリンクは、このような方法で構成されています

NSStringの* linkString = [NSStringのstringWithFormat:@ "のhttp://%@.s3.amazonaws.com/%@"、バケツ、キー] ;

ここで、bucketはS3上のフォルダの名前で、Keyはファイルの名前です。それでおしまい。

+0

ああ、私はコメントなしでdownvotesが嫌い! :(もしあなたがとても賢いなら、なぜあなたは質問に答えなかったのですか? – Stas

1

のために、あなたの質問に答えるために:

  1. 名前がある宣言するkey変数をファイルはS3に取り込まれます。ファイルはバケット内のキーで識別され、キーは一意でなければなりません。ファイル名のようなものだとは思えますが、フォルダーのレベルは1つしかありません(バケット)。
  2. 要求が完了すると(startSynchronousメソッドが返されます)、S3が提供した返品データを取得する要求のresponseDataまたはresponseString属性にアクセスできるように見えます。
+0

ファイルごとにバケットを作成するか、多数のファイルに対して1つのバケットを使用できますか? – Stas

+0

多くのファイルに対して1つのバケットを使用できますが、各バージョンにはそれぞれ固有のキーが必要です。 – Tim

+0

わかりました。 SharedSecretAccessKeyとSharedAccessKey以外の追加情報を提供する必要があることを教えてください。バケットのリストを取得しようとしていますが、エラーが発生しています ASIS3ServiceRequest * requestOfBuckets = [ASIS3ServiceRequest serviceRequest]; [requestOfBuckets startSynchronous]; if(![リクエストエラー]){ NSArray * buckets = [requestOfBuckets buckets]; // ASIS3Bucketオブジェクトの配列 NSLog(@ "バケット:%@"、バケット); } – Stas

関連する問題