2015-05-25 11 views
5

के साथ छवि अपलोड करना मेरे पास छवियों को EXIF ​​डेटा के साथ .jpg प्रारूप में मेरे दस्तावेज़ दस्तावेज़ निर्देशिका में सहेजा गया है। मेरी समस्या यह है कि, जब भी मैं .jpg फ़ाइलों को HTTP POST का उपयोग करके अपलोड करने के लिए NSData में परिवर्तित करने का प्रयास करता हूं, अपलोड की गई छवि अपने सभी EXIF ​​डेटा को खो देती है।आईओएस - EXIF ​​बरकरार

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; 
NSString *imagePath = [documentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",imageName]]; 
NSData *jpegImageData = [NSData dataWithContentsOfFile:imagePath]; 

मैं अपनी एक्सआईएफआई के साथ दस्तावेज़ निर्देशिका से अपनी .jpg फ़ाइलों को कैसे अपलोड कर सकता हूं?

+0

आप वास्तव में कैसे जानते हैं कि (1) छवि फ़ाइल में EXIF ​​जानकारी है जब यह दस्तावेज़ निर्देशिका में है और (2) फ़ाइल अपलोड करने के बाद उस जानकारी को खो गई है? – matt

+0

(1) मैंने फ़ाइल प्रबंधक का उपयोग करके दस्तावेज़ निर्देशिका का उपयोग किया और छवि को कॉपी किया। फिर छवि EXIF ​​देखने के लिए ऑनलाइन EXIF ​​टूल का उपयोग करना। (2) अपलोड की गई छवि को फिर से सर्वर से डाउनलोड किया गया और उस पर EXIF ​​उपकरण का उपयोग किया गया, सभी EXIF ​​डेटा खो गया है। – Gudmund

उत्तर

1

जेपीजी फ़ाइल के EXIF ​​मेटाडेटा को रखने के लिए। मैंने समाधान के साथ काम किया:

- (void)uploadImage:(NSString *)imagePath { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
     // Repair upload data 
     UIImage *image = [UIImage imageNamed:imagePath]; 

     NSData *rawDataImage = UIImageJPEGRepresentation(image, 1.0f); 

     NSString *base64EncodedString = @""; 
     if ([rawDataImage respondsToSelector:@selector(base64EncodedStringWithOptions:)]) 
     { 
      base64EncodedString = [rawDataImage base64EncodedStringWithOptions:0]; 
     } 
     else 
     { 
      base64EncodedString = [rawDataImage base64Encoding]; 
     } 

     NSString *uploadBody = [NSString stringWithFormat:@"{\"imageData\": \"%@\"}", base64EncodedString]; 

     // Post uploadBody to server 
     NSString *serverUrl = @"Your_server"; 

     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:serverUrl]]; 

     [request addValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 

     NSString *msgLength = [NSString stringWithFormat:@"%lu", uploadBody.length]; 
     [request addValue:msgLength forHTTPHeaderField:@"Content-Length"]; 

     [request setHTTPMethod:@"POST"]; 
     [request setHTTPBody:[uploadBody dataUsingEncoding:NSUTF8StringEncoding]]; 

     [NSURLConnection connectionWithRequest:request delegate:<your_delegate OR nil>]; 
    }); 
} 

आशा है कि यह आपकी मदद करेगा।

+0

ओपी ने EXIF ​​जानकारी के बारे में पूछा। – Andrea

+0

@ एंड्रिया: हाँ, यह समाधान आपके EXIF ​​डेटा को पूरी तरह से रखता है। मैंने – phuongle

+0

@phuongle समाधान के लिए धन्यवाद, मैंने बेस सर्वर एन्कोडेड स्ट्रिंग को अपने सर्वर पर पोस्ट करने का प्रयास किया लेकिन अपलोड किया गया jpg दूषित प्रतीत होता है। मैं बेस 64 एन्कोडेड स्ट्रिंग कैसे पोस्ट करूं? – Gudmund

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