2013-02-25 52 views
9

Tôi mới sử dụng AWS và sử dụng nó cho ứng dụng iOS.AWS S3 Tải hình ảnh lên ứng dụng Bucket iOS

Tôi đang cố gắng tải hình ảnh từ ứng dụng iOS lên nhóm có tên "img.haraj.com.sa". Khi tôi tải lên bất kỳ hình ảnh nào, chúng không được hiển thị trong nhóm. Nhưng khi tôi thay đổi mục tiêu thành nhóm có tên là "haraj", chúng được tải lên và hiển thị trong nhóm.

Đây là chính sách:

{ 
    "Statement": [ 
    { 
     "Sid": "**********hidden**********", 
     "Action": [ 
     "s3:GetObject", 
     "s3:PutObject" 
     ], 
     "Effect": "Allow", 
     "Resource": [ 
     "arn:aws:s3:::haraj/*" 
     ] 
    } 
    ] 
} 

tôi sửa đổi này để thay đổi xô mục tiêu. Tôi cũng đã tạo các nhóm khác có tên "img1.haraj.com.sa" và đã thử tải hình ảnh lên và tiếc là chúng cũng không thành công.

Dường như có một số vấn đề khi có tên nhóm có dấu chấm (.) Và không có dấu chấm. Tên của các nhóm không có dấu chấm hoạt động với ứng dụng iOS và các tên có dấu chấm không hoạt động. Tôi không chắc chắn. Nhưng tôi đang đối mặt với vấn đề này. Tôi không nhận được bất kỳ phản hồi lỗi nào trong mã ứng dụng.

Dưới đây là một phần của việc thực hiện ứng dụng iOS của tôi:

- (void)postAdButtonPushed:(id)sender 
{ 
    DLog(@"Post Ad") 

    AmazonS3Client *s3Client = [[AmazonS3Client alloc] initWithAccessKey:AWS_ACCESS_KEY_ID withSecretKey:AWS_SECRET_KEY]; 
    s3Client.timeout = 240; 

    NSString *bucketName = [NSString stringWithFormat:@"img.haraj.com.sa"]; 
    NSString *imageName = [NSString stringWithFormat:@"testimage.jpg"]; 

    S3PutObjectRequest *objReq = [[S3PutObjectRequest alloc] initWithKey:imageName inBucket:bucketName]; 
    objReq.contentType = @"image/jpeg"; 

    UIImage *testImageToUpload = [self.imagesToUpload objectAtIndex:0]; 

    NSData *imageData = UIImageJPEGRepresentation(testImageToUpload, 0.8); 
    objReq.data = imageData; 
    objReq.delegate = self; 

    objReq.contentLength = [imageData length]; 

    [s3Client putObject:objReq]; 
} 

- (void)request:(AmazonServiceRequest *)request didCompleteWithResponse:(AmazonServiceResponse *)response 
{ 
    DLog(@"response: %@", response.description) 
} 

- (void)request:(AmazonServiceRequest *)request didFailWithError:(NSError *)error 
{ 
    DLog(@"Req failed: %@", error.description) 
} 

Tôi cũng tạo ra một thread trên Amazon diễn đàn tại địa chỉ: AWS Upload image to Bucket iOS app

Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn bạn!

+0

https://forums.aws.amazon.com/ message.jspa? messageID = 385925 – Eric

+0

Cảm ơn @Eric. Sửa chữa đó là dành cho phiên bản Java. Tôi đang sử dụng SDK AWS trong iOS. Và tôi đã tích hợp khung công tác (không phải mã nguồn của sdk). Cho phép hy vọng một số giải pháp dễ dàng đi ra, nếu không tôi sẽ phải làm việc xung quanh một cái gì đó với mã nguồn sau đó. : \ –

Trả lời

6

Tôi đã đăng câu trả lời cho chủ đề diễn đàn here, nhưng để tóm tắt, tôi tin rằng bạn đã gặp phải lỗi trong SDK và cần đặt rõ điểm cuối S3 nơi đặt nhóm của bạn.

+0

Cảm ơn Bob! Nó đang làm việc bây giờ. Tôi hy vọng điều này được khắc phục trong bản phát hành tiếp theo của SDK :) –

+0

Rất tiếc, tôi không nghĩ rằng đó là trường hợp. Ngoài ra, chúng tôi có khả năng sẽ đi theo con đường của bong bóng một ngoại lệ trong trường hợp này, vì vậy bất kể bạn sẽ rất có thể tiếp tục cần phải thiết lập điểm cuối một cách rõ ràng cho những trường hợp này. Điều này thực sự sẽ giúp thực hiện ứng dụng của bạn vì nó sẽ không phải xử lý một chuyển hướng và đưa ra yêu cầu thứ hai. –

+0

OK! Có lẽ đề cập đến điều này trong tài liệu sẽ hữu ích hơn :) –

6

Chỉ muốn cân nhắc trong, đây là một đoạn mã mà tôi đã làm việc

// #import <AWSS3/AWSS3.h> 
// #import <AWSRuntime/AWSRuntime.h> 
// then you should implement <AmazonServiceRequestDelegate> 
// import those in your .h file and 
// add the awss3 and awsruntime framework from the client 
// download from Amazon 
// myFace is the UIImage object 

    AmazonS3Client *s3Client = [[AmazonS3Client alloc] initWithAccessKey:@"Key_Goes_here" withSecretKey:@"Secret_Goes_Here"]; 

    NSString *imageName = [NSString stringWithFormat:@"%@.png", @"cpa"]; 

    S3PutObjectRequest *objReq = [[S3PutObjectRequest alloc] initWithKey:imageName inBucket:@"bucket_name"]; 
    objReq.contentType = @"image/png"; 
    objReq.cannedACL = [S3CannedACL publicRead]; 
    objReq.data = UIImagePNGRepresentation(myFace); 
    objReq.delegate = self; 

    [s3Client putObject:objReq]; 

đây là những phương pháp đại biểu:

-(void)request:(AmazonServiceRequest *)request didSendData:(long long)bytesWritten totalBytesWritten:(long long)totalBytesWritten totalBytesExpectedToWrite:(long long)totalBytesExpectedToWrite { 
} 

-(void)request:(AmazonServiceRequest *)request didReceiveResponse:(NSURLResponse *)response { 
    NSLog(@"response! %@", response); 
} 

-(void)request:(AmazonServiceRequest *)request didCompleteWithResponse:(AmazonServiceResponse *)response { 

} 

-(void)request:(AmazonServiceRequest *)request didReceiveData:(NSData *)data { 
    NSLog(@"data?"); 
} 

-(void)request:(AmazonServiceRequest *)request didFailWithError:(NSError *)error { 
    [self showAlertMessage:[error.userInfo objectForKey:@"message"] withTitle:@"Upload Error"]; 
} 
+4

hahahahahahh oh man. Khoảnh khắc tràn buồn cười. Tìm kiếm cách làm điều gì đó. Tìm mã bạn đã đăng. Không nhận ra bạn đã đăng. Cố gắng bỏ phiếu vì nó vẫn là giải pháp duy nhất tôi có thể tìm thấy. – chrisallick

Các vấn đề liên quan