2012-02-24 4 views
0

아마존 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/%@"버킷 키] ;

여기서 버킷은 S3의 폴더 이름이고 Key는 파일 이름입니다. 그게 전부 야.

+0

아, 주석없이 downvote 싫어! :(만약 당신이 너무 똑똑하다면 왜 당신은 질문에 대답하지 않았습니까 ?? – Stas

1

을 위해 귀하의 질문에 대답하려면 :

  1. 당신이 거기 선언 key 변수의 이름입니다 지금 나는 다음 (내 질문에 코드에서 실제로)를 수행 한 파일은 S3에 저장됩니다. 파일은 버킷 내에서 키로 식별되며 키는 고유해야합니다 (예 : 파일 이름과 비슷하다고 생각하지만 한 수준의 폴더 (버킷) 만 받음).
  2. 요청이 완료되면 (startSynchronous 메서드가 반환 됨) S3에서 제공 한 모든 반환 데이터를 가져 오는 요청의 responseData 또는 responseString 속성에 액세스 할 수있는 것 같습니다.
+0

파일마다 버킷을 만들어야합니까, 아니면 하나의 버킷을 여러 파일에 사용할 수 있습니까? – Stas

+0

많은 파일에 대해 하나의 버킷을 사용할 수 있지만 각 버킷에는 고유 한 고유 키가 필요합니다. – Tim

+0

괜찮습니다. SharedSecretAccessKey 및 SharedAccessKey 외에 추가 정보를 제공해야한다고 알려주십시오. 버킷 목록을 가져 오려고하는데 오류가 발생합니다. ASIS3ServiceRequest * requestOfBuckets = [ASIS3ServiceRequest serviceRequest]; [requestOfBuckets startSynchronous]; if (! [요청 오류]) { NSArray * buckets = [requestOfBuckets buckets]; // ASIS3Bucket 객체 배열 NSLog (@ "버킷 : % @", 버킷); } – Stas

관련 문제