2015-05-25 12 views
5

Ich habe Bilder in meiner Anwendung gespeichert Dokumente Verzeichnis im .jpg Format mit EXIF-Daten. Mein Problem ist, wenn ich versuche, die .jpg Dateien in NSData zu konvertieren, um mit HTTP POST hochgeladen zu werden, das hochgeladene Bild verliert alle seine EXIF-Daten.iOS - Bild mit EXIF ​​intakt hochladen

Wie kann ich meine .jpg-Dateien aus dem Verzeichnis Dokumente mit ihren EXIF ​​intakt hochladen?

+0

Wie genau wissen Sie, dass (1) die Bilddatei die EXIF-Informationen enthält, wenn sie sich im Verzeichnis Dokumente befinden und (2) die Datei diese Informationen nach dem Hochladen verloren hat? – matt

+0

(1) Ich habe mit einem Dateimanager auf das Documents-Verzeichnis zugegriffen und das Image kopiert. Dann verwenden Sie EXIF-Tools online, um das Bild EXIF ​​anzuzeigen. (2) Laden Sie das hochgeladene Bild erneut vom Server herunter und verwenden Sie das EXIF-Tool, um alle EXIF-Daten zu löschen. – Gudmund

Antwort

1

Um die EXIF-Metadaten der JPG-Datei zu behalten. Ich arbeitete mit der Lösung:

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

Hoffe, dass diese Ihnen helfen.

+0

Das OP fragte nach EXIF-Informationen. – Andrea

+0

@Andrea: Ja, diese Lösung hält Ihre EXIF-Daten perfekt. Ich tat – phuongle

+0

@phuongle Danke für die Lösung, habe ich versucht, die Base64-codierte Zeichenfolge auf meinem Server zu veröffentlichen, aber das hochgeladene jpg scheint beschädigt zu sein. Wie poste ich eine Base64-codierte Zeichenfolge? – Gudmund