AWS S3 SDK适用于iOS putObjectRegquest到“新”区不工作(aws s3

2019-10-29 05:26发布

首先让我说,我是新的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);
    }

});

}

Answer 1:

我是AWS SDK适用于iOS的维护者之一。 对不起,你遇到的困难。

如果你的水桶名称包含非字母数字字符,您可能需要亚马逊S3客户端的端点设置为您的桶的区域。

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

您也可以打开详细日志记录在您的应用程序,看看从服务生的反应,同时使用SDK。 如果你看到回来的是不被捕获错误,请告诉我们。

[AmazonLogger verboseLogging];

一对夫妇的事情,我会注意到你的代码,你可能还需要考虑:

  • 一旦桶被创建,你不再需要调用创建桶。 您可能需要考虑取消S3CreateBucketRequest/S3CreateBucketResponse从您的应用程序。
  • S3桶命名是在所有地区是唯一的。 如果桶是在美国创建的标准,那么你不能在新加坡没有美国标准先删除斗创建它。
  • 你似乎是混合在你的代码都异常和错误处理。 请参阅我们的博客文章就如何在SDK中控制异常处理。


文章来源: aws s3 sdk for iOS putObjectRegquest to “new” region not working