Ich weiß, dass diese Frage alt ist, aber in den letzten Tagen hatte ich das gesamte Web durchsucht, um dieselbe Frage zu lösen. Ich habe Grails REST Webservices und iPhone Client, die Bilder, Titel und Beschreibung senden.
Ich weiß nicht, ob mein Ansatz der beste ist, aber er ist so einfach und unkompliziert.
Ich mache ein Bild mit dem UIImagePickerController und sende die NSData mit den Header-Tags der Anfrage an den Server, um die Daten des Bildes zu senden.
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"myServerAddress"]];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:UIImageJPEGRepresentation(picture, 0.5)];
[request setValue:@"image/jpeg" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"myPhotoTitle" forHTTPHeaderField:@"Photo-Title"];
[request setValue:@"myPhotoDescription" forHTTPHeaderField:@"Photo-Description"];
NSURLResponse *response;
NSError *error;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
Auf der Serverseite erhalte ich das Foto mit dem folgenden Code:
InputStream is = request.inputStream
def receivedPhotoFile = (IOUtils.toByteArray(is))
def photo = new Photo()
photo.photoFile = receivedPhotoFile //photoFile is a transient attribute
photo.title = request.getHeader("Photo-Title")
photo.description = request.getHeader("Photo-Description")
photo.imageURL = "temp"
if (photo.save()) {
File saveLocation = grailsAttributes.getApplicationContext().getResource(File.separator + "images").getFile()
saveLocation.mkdirs()
File tempFile = File.createTempFile("photo", ".jpg", saveLocation)
photo.imageURL = saveLocation.getName() + "/" + tempFile.getName()
tempFile.append(photo.photoFile);
} else {
println("Error")
}
Ich weiß nicht, ob ich in Zukunft Probleme habe, aber jetzt funktioniert es gut in der Produktionsumgebung.