putObject异常。可能是因为publicRead

时间:2014-04-30 19:51:04

标签: ios amazon-web-services amazon-s3 amazon

我正在进行未捕获的异常,在执行putObject时无法使用try / catch捕获(可能是因为它在不同的线程上运行)。问题是间歇性的,我还没有找到模式。当我将ACL设置为publicRead时,可能会发生此问题。

我使用的是最新的SDK版本1.7.1。

以下是代码:

AmazonS3Client *S3 = [[AmazonS3Client alloc] initWithAccessKey:kAWSAccessKey withSecretKey:kAWSSecretKey];
S3.endpoint = [AmazonEndpoints s3Endpoint:US_WEST_2];
S3PutObjectRequest *S3POR = [[S3PutObjectRequest alloc] initWithKey:imageKey inBucket:kS3SignatureBucket];
S3POR.delegate = self;
S3POR.cannedACL = [S3CannedACL publicRead];
S3POR.contentType = @"image/png";
S3POR.data = UIImagePNGRepresentation(imageData);
[S3 putObject:S3POR];

1 个答案:

答案 0 :(得分:0)

我不知道您问题的答案,但您可以尝试使用我的代码:

AmazonS3Client *s3Client = [ [ AmazonS3Client alloc ] initWithAccessKey:strAccessKey withSecretKey:strSecretKey ];
s3Client.endpoint = [ AmazonEndpoints s3Endpoint:EU_WEST_1 ];
s3Client.maxRetries = 1;
s3Client.timeout = 60;

S3TransferManager *s3TransferManager = [ [ S3TransferManager alloc ] init ];
s3TransferManager.operationQueue.maxConcurrentOperationCount = 2;
s3TransferManager.s3 = s3Client;

NSString *keyImage = //... here I generate a key

S3PutObjectRequest *putObjectRequest = [ [ S3PutObjectRequest alloc ] initWithKey:keyImage inBucket:self.s3BucketName ];
putObjectRequest.contentType = @"image/jpeg";
putObjectRequest.data = UIImageJPEGRepresentation( image, 0.5f );
putObjectRequest.cannedACL = [ S3CannedACL publicRead ];

putObjectRequest.delegate = self;
[ s3TransferManager upload:putObjectRequest ];

另外,不要忘记保持对AmazonS3Client和S3TransferManager的强引用,直到上传完成!