2012-02-24 126 views
0

我試圖將圖像上傳到Amazon S3並獲取該文件的鏈接(使用ASIHTTPRequest進行亞馬遜S3)。現在我已經做了以下(我的問題實際上是代碼):如何將文件上傳到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 2012-03-01 19:38:41

1

回答您的問題依次是:

  1. 聲明那裏key變量名稱該文件將在S3中進行。文件由桶內的鍵標識,並且鍵必須是唯一的 - 認爲它們有點像文件名,但你只能得到一個級別的文件夾(桶)。
  2. 一旦您的請求完成(startSynchronous方法返回),看起來您可以訪問請求的responseDataresponseString屬性來獲取S3提供的任何返回數據。
+0

我應該爲每個文件創建一個存儲桶嗎?或者我可以爲多個文件使用一個存儲桶? – Stas 2012-02-24 10:30:23

+0

您可以(也應該)爲多個文件使用一個存儲桶,但每個文件都需要在該存儲桶中擁有自己唯一的密鑰。 – Tim 2012-02-24 10:55:21

+0

好的,理解。請告訴我除了SharedSecretAccessKey和SharedAccessKey之外是否還需要提供其他信息。我試圖得到桶的列表,但我得到一個錯誤 ASIS3ServiceRequest * requestOfBuckets = [ASIS3ServiceRequest serviceRequest]; [requestOfBuckets startSynchronous];如果(![請求錯誤]){ NSArray * bucket = [requestOfBuckets bucket]; //一組ASIS3Bucket對象 NSLog(@「buckets:%@」,bucket); } – Stas 2012-02-24 11:03:45

相關問題