aws s3 sdk для iOS putObjectRegquest в «новый» регион не работает

сначала позвольте мне сказать, что я новый ios / xcode, а также AWS.

Я создаю приложение, которое записывает данные в ведро AWS S3. Приложение работает при создании ведра и размещении объектов в стандартном регионе США. Однако, когда я меняю регион на Сингапур, приложение автоматически создает ведро – но я не могу поместить объекты в ведро, и AWS не создает ошибку или исключение любого вида.

Вот этот код. Прокомментированный код в методе createBucket успешно создает ведро в Сингапуре. Метод processGrandCentralDispatchUpload работает в стандартном регионе США, но не помещает объекты в мое хранилище в Сингапуре.

- (void)createBucket { // Create the bucket. @try { //S3Region *region = [[S3Region alloc] initWithStringValue:kS3RegionAPSoutheast1]; //S3CreateBucketRequest *createBucketRequest = [[S3CreateBucketRequest alloc] initWithName:[Constants S3Bucket] andRegion:region]; S3CreateBucketRequest *createBucketRequest = [[S3CreateBucketRequest alloc] initWithName:[Constants S3Bucket]]; S3CreateBucketResponse *createBucketResponse = [self.s3 createBucket:createBucketRequest]; NSLog(@"create bucket response: %@", createBucketResponse.error); if(createBucketResponse.error != nil) { NSLog(@"Error: %@", createBucketResponse.error); } } @catch (AmazonServiceException* asex) { NSLog(@"putObject - AmazonServiceException - %@", asex); } @catch (AmazonClientException* acex) { NSLog(@"putObject - AmazonClientException - %@", acex); } 

}

 - (void)processGrandCentralDispatchUpload:(NSData *)jsonData withTimestamp:(int)timestamp 

{

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ UserData * user = [[[DataStore defaultStore] user] objectAtIndex:0]; NSString * dateKeyComponent = [self putRequestDateComponent:timestamp]; objectName = [NSString stringWithFormat:@"%@/%@/%@", user.email, user.uniqueIdentifier, dateKeyComponent]; S3PutObjectRequest *putObjectRequest = [[S3PutObjectRequest alloc] initWithKey:objectName inBucket:[Constants S3Bucket]]; putObjectRequest.contentType = @"data/json"; putObjectRequest.data = jsonData; // Put the image data into the specified s3 bucket and object. @try { S3PutObjectResponse *putObjectResponse = [self.s3 putObject:putObjectRequest]; dispatch_async(dispatch_get_main_queue(), ^{ if(putObjectResponse.error != nil) { NSLog(@"Error: %@", putObjectResponse.error); [self showAlertMessage:[putObjectResponse.error.userInfo objectForKey:@"message"] withTitle:@"Upload Error"]; } else { //[self showAlertMessage:@"The data was successfully uploaded." withTitle:@"Upload Completed"]; } [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; }); } @catch (AmazonServiceException* asex) { NSLog(@"putObject - AmazonServiceException - %@", asex); } @catch (AmazonClientException* acex) { NSLog(@"putObject - AmazonClientException - %@", acex); } }); 

}

Я являюсь одним из разработчиков SDK SDK для iOS. Мне жаль, что вы столкнулись с трудностями.

Если ваше имя в ковше содержит неадминистративные символы, вам может потребоваться установить конечную точку клиента Amazon S3 в область вашего ведра.

 AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithCredentialsProvider:provider]; s3.endpoint = [AmazonEndpoints s3Endpoint:AP_SOUTHEAST_1]; 

Вы также можете включить подробное ведение журнала в своем приложении, чтобы просмотреть исходные ответы от службы при использовании SDK. Если вы видите ошибки, которые не попадают, сообщите нам об этом.

 [AmazonLogger verboseLogging]; 

Несколько вещей, которые я хочу отметить о вашем коде, который вы также можете рассмотреть:

  • Когда создается ведро, вам больше не нужно вызывать создание bucket. Вы можете захотеть удалить S3CreateBucketRequest/S3CreateBucketResponse из своего приложения.
  • Именование наименований S3 уникально во всех регионах. Если ведро было создано в US Standard, вы не сможете создать его в Сингапуре без предварительного удаления ведра в стандарте US.
  • Кажется, вы смешиваете как исключение, так и обработку ошибок в своем коде. См. Наше сообщение в блоге о том, как управлять обработкой исключений в SDK.
Interesting Posts
Давайте будем гением компьютера.