Как загрузить файл в amazon s3 и получить ссылку на него? - PullRequest
0 голосов
/ 24 февраля 2012

Я пытаюсь загрузить изображение в 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

Ответы [ 2 ]

6 голосов
/ 01 марта 2012

Окей, мне удалось сделать это самому :) Во-первых, вы должны установить политику доступа, которая является свойством запроса PUT

requestForPUTSmth.accessPolicy = ASIS3AccessPolicyPublicReadWrite;

Ссылка дляфайл составляется таким образом:

NSString * linkString = [NSString stringWithFormat: @ "http://%@.s3.amazonaws.com/%@", bucket, key];

Где bucket - это имя вашей папки на S3 иКлюч - это имя файла. Вот и все.

1 голос
/ 24 февраля 2012

Чтобы ответить на ваши вопросы по порядку:

  1. Переменная key, которую вы объявляете, - это имя, которое файл примет в S3. Файлы идентифицируются по их ключам в пределах сегментов, и ключи должны быть уникальными - представьте их как имена файлов, но вы получите только один уровень папок (сегментов).
  2. Как только ваш запрос завершен (возвращается метод startSynchronous), похоже, что вы можете получить доступ к атрибутам responseData или responseString запроса, чтобы получить любые возвращаемые данные, предоставленные S3.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...