2013-02-25 32 views
9

पर छवि अपलोड करें मैं एडब्ल्यूएस के लिए नया हूं और आईओएस ऐप के लिए इसका उपयोग कर रहा हूं।एडब्ल्यूएस एस 3 बाल्टी आईओएस ऐप

मैं अपने आईओएस ऐप से छवियों को "img.haraj.com.sa" नामक बाल्टी में अपलोड करने की कोशिश कर रहा हूं। जब मैं कोई छवि अपलोड करता हूं, तो उन्हें बाल्टी में नहीं दिखाया जाता है। लेकिन जब मैं लक्ष्य "हरज" नामक बाल्टी में बदलता हूं, तो उन्हें बाल्टी में अपलोड और दिखाया जाता है।

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

मैं लक्ष्य बाल्टी को बदलने के लिए इस संशोधित:

यहाँ नीति है। मैंने "img1.haraj.com.sa" नाम के साथ अन्य बाल्टी भी बनाई और छवियों को अपलोड करने का प्रयास किया और दुर्भाग्य से वे भी असफल रहे।

ऐसा लगता है कि डॉट्स (।) और बिना डॉट्स के बाल्टी नाम रखने में कुछ समस्या है। डॉट्स के बिना बाल्टी के नाम आईओएस ऐप के साथ काम करते हैं और डॉट्स के साथ नाम काम नहीं करते हैं। मुझे यकीन नहीं है हालांकि। लेकिन मुझे इस समस्या का सामना करना पड़ रहा है। मुझे ऐप कोड में कोई त्रुटि प्रतिक्रिया नहीं मिली है।

यहाँ मेरी iOS एप्लिकेशन कार्यान्वयन का हिस्सा है: AWS Upload image to Bucket iOS app

किसी भी मदद की सराहना की जाएगी:

- (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) 
} 

मैं भी एक धागा अमेज़न फोरम पर पर बनाया। धन्यवाद!

+0

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

+0

धन्यवाद @Eric। वह फिक्स जावा संस्करण के लिए है। मैं आईओएस में एडब्ल्यूएस एसडीके का उपयोग कर रहा हूँ। और मैंने ढांचे को एकीकृत किया है (एसडीके का स्रोत कोड नहीं)। आइए उम्मीद करते हैं कि कुछ आसान समाधान निकलता है, अन्यथा मुझे सोर्स कोड के साथ कुछ काम करना होगा। : \ –

उत्तर

6

मैंने आपके फोरम थ्रेड here पर एक प्रतिक्रिया पोस्ट की है, लेकिन संक्षेप में, मुझे विश्वास है कि आपने एसडीके में एक बग के खिलाफ उछाल लिया है और एस बाउंडेट को स्पष्ट रूप से सेट करने की आवश्यकता होगी जहां आपकी बाल्टी स्थित है।

+0

धन्यवाद बॉब! अब यह काम कर रहा है। मुझे उम्मीद है कि यह एसडीके की अगली रिलीज में तय है :) –

+0

दुर्भाग्य से मुझे नहीं लगता कि यह मामला होगा। इसके अतिरिक्त, हम इस मामले में अपवाद को बुलबुले करने के मार्ग पर जा सकते हैं, इस पर ध्यान दिए बिना कि आपको इन मामलों के लिए स्पष्ट रूप से एंडपॉइंट सेट करने की आवश्यकता होगी। यह वास्तव में आपके एप्लिकेशन के प्रदर्शन में मदद करेगा क्योंकि इसे रीडायरेक्ट को संभालने और दूसरा अनुरोध करने की आवश्यकता नहीं होगी। –

+0

ठीक है! शायद दस्तावेज़ीकरण में इसका उल्लेख करना अधिक सहायक होगा :) –

6

बस में वजन करना चाहता था, यहाँ एक कोड का टुकड़ा है कि मैं

// #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]; 

यहाँ काम कर ली कर रहे हैं प्रतिनिधि तरीकों है:

-(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

हाहाहहाह ओह आदमी। मजेदार स्टैक ओवरफ्लो पल। कुछ कैसे करना है इसके लिए खोज रहे हैं। आपके द्वारा पोस्ट किया गया कोड ढूंढें। आपको पता नहीं है कि आपने पोस्ट किया है। मतदान करने का प्रयास करें क्योंकि यह अभी भी एकमात्र समाधान है जिसे मैं पा सकता हूं। – chrisallick

संबंधित मुद्दे