2015-05-25 27 views
5

Tôi có hình ảnh được lưu trong thư mục Tài liệu ứng dụng của tôi ở định dạng .jpg với dữ liệu EXIF. Vấn đề của tôi là, bất cứ khi nào tôi cố gắng chuyển đổi các tệp .jpg thành NSData để được tải lên bằng cách sử dụng HTTP POST, hình ảnh tải lên sẽ mất tất cả dữ liệu EXIF ​​của nó.iOS - Tải lên hình ảnh với EXIF ​​còn nguyên vẹn

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

Làm cách nào để tải lên tệp .jpg của tôi từ thư mục Documents với EXIF ​​còn nguyên vẹn?

+0

Làm thế nào để bạn biết rằng (1) tệp hình ảnh có thông tin EXIF ​​khi nó nằm trong thư mục Tài liệu và (2) tệp đã mất thông tin đó sau khi tải lên? – matt

+0

(1) Tôi đã truy cập thư mục Documents bằng trình quản lý tệp và sao chép hình ảnh ra. Sau đó sử dụng công cụ EXIF ​​trực tuyến để xem hình ảnh EXIF. (2) Tải xuống lại hình ảnh đã tải lên từ máy chủ và sử dụng công cụ EXIF ​​trên đó, tất cả dữ liệu EXIF ​​bị mất. – Gudmund

Trả lời

1

Để giữ siêu dữ liệu EXIF ​​của tệp jpg. Tôi đã làm việc với giải pháp:

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

Hy vọng điều này sẽ giúp bạn.

+0

OP hỏi về thông tin EXIF. – Andrea

+0

@Andrea: Vâng, giải pháp này giữ cho dữ liệu EXIF ​​của bạn hoàn hảo. Tôi đã làm – phuongle

+0

@phuongle Cảm ơn bạn đã giải quyết, tôi đã thử đăng chuỗi mã hóa base64 lên máy chủ của mình nhưng jpg đã tải lên dường như bị hỏng. Làm cách nào để đăng chuỗi mã hóa base64? – Gudmund

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