2017-05-05 107 views
0

我正在使用AWSS3上传图片的应用程序。以下是我的代码。不过,我收到有关池ID未找到的错误。我不确定发生了什么,我是否需要添加更多。如何上传图片AWSS3 TransferManager上传请求目标c?

这是获得

错误域= com.amazonaws.AWSCognitoIdentityErrorDomain代码= 10 “(空)” 的UserInfo = {__类型= ResourceNotFoundException,消息= IdentityPool 'AP-东北-1:XXXXXXX' 错误未找到

AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@""]; 
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider]; 
AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration; 

// get the image from a UIImageView that is displaying the selected Image 

// create a local image that we can use to upload to s3 
NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:@"image.png"]; 
NSData *imageData = UIImagePNGRepresentation(selectedImage); 
[imageData writeToFile:path atomically:YES]; 

// once the image is saved we can use the path to create a local fileurl 
NSURL *url = [[NSURL alloc] initFileURLWithPath:path]; 

// next we set up the S3 upload request manager 
AWSS3TransferManagerUploadRequest *_uploadRequest = [AWSS3TransferManagerUploadRequest new]; 
// set the bucket 
_uploadRequest.bucket = @"chatify"; 
// I want this image to be public to anyone to view it so I'm setting it to Public Read 
_uploadRequest.ACL = AWSS3ObjectCannedACLPublicRead; 
// set the image's name that will be used on the s3 server. I am also creating a folder to place the image in 
_uploadRequest.key = @"ios/image.png"; 
// set the content type 
_uploadRequest.contentType = @"image/png"; 
// we will track progress through an AWSNetworkingUploadProgressBlock 
_uploadRequest.body = url; 

__weak ClaimViewController *weakSelf = self; 

_uploadRequest.uploadProgress =^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend){ 
    dispatch_sync(dispatch_get_main_queue(), ^{ 

     weakSelf.amountUploaded = totalBytesSent; 
     weakSelf.filesize = totalBytesExpectedToSend; 
     [weakSelf update]; 

    }); 
}; 

// now the upload request is set up we can creat the transfermanger, the credentials are already set up in the app delegate 
AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager]; 
// start the upload 
[[transferManager upload:_uploadRequest] continueWithExecutor:[AWSExecutor mainThreadExecutor] withBlock:^id(AWSTask *task) { 

    // once the uploadmanager finishes check if there were any errors 
    if (task.error) { 
     NSLog(@"%@", task.error); 
    }else{// if there aren't any then the image is uploaded! 
     // this is the url of the image we just uploaded 
     NSLog(@"https://s3.amazonaws.com/s3-demo-objectivec/foldername/image.png"); 
    } 
    return nil; 
}]; 

回答

0

喜@kashif错误明确说,你需要添加池ID

AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@""]; 

,但在上面的代码中你只是传递了黑色的identityPoolI d

这也是另一种方法,其提供凭证

AWSStaticCredentialsProvider *credentialsProvider = [AWSStaticCredentialsProvider credentialsWithAccessKey:@"AccessKey" secretKey :@"secretKey"]; 
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSWest2 
                     credentialsProvider:credentialsProvider]; 
[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration; 
+0

它只是用于发布,我删除池ID,否则我已经通过池ID previosly – Kashif

+0

我刚刚更新了我的回答,请用第二溶液 –

+0

尝试@Kashif可能是你需要检查你IAM策略,因为您没有对访问进行身份验证 –

0

这个错误是因为你的Cognito身份池正在从您的帐户删除或错误地设置区域。根据我在发布的代码中看到的内容,您的区域应设置为 AWSRegionAPNorthEast1

感谢, 罗汉