2016-05-10 26 views
0

Ich möchte ein Bild an den Webserver senden, der RestFul APIs hat. Das habe ich in meinem Backend. Erstes RequestParam ecgImage ist das Bild.ios, wandle UIImage in eine MultipartFile

@RequestMapping(value = "/ecgimage", method = RequestMethod.POST) 
    public void profileImage(@RequestParam("ecgImage") MultipartFile formData, 
      @RequestParam("heartRate") int heartRate, 
      @RequestParam("dateTime") String dateTime, 
      @RequestParam("mac") String mac, @RequestParam("qrs") String qrs, 
      @RequestParam("result") String result) throws Exception { 
    ...... 
} 

ich für die Herstellung erholsamen Anrufe UNIRest libary in ios bin mit und ich hoffe, so etwas wie dieses

UIImage *img = // this is the image that I want to send 

NSDictionary* headers = @{@"Content-Type": @"application/x-www-form-urlencoded"}; 
NSMutableDictionary* parameters = [[NSMutableDictionary alloc] init]; 
[parameters setObject:[self.dateUtils convertNSDateToMMDDYYY:date] forKey:@"date"]; 
[parameters setObject:hr forKey:@"heartRate"]; 
[parameters setObject:hr forKey:@"result"]; 
[parameters setObject:qrs forKey:@"qrs"]; 
[parameters setObject:????????? forKey:@"ecgImage"]; 

[[UNIRest post:^(UNISimpleRequest *request) { 
    [request setUrl:POstECGImage]; 
// [request setHeaders:headers]; 
    [request setParameters:parameters]; 
}] asJsonAsync:^(UNIHTTPJsonResponse* response, NSError *error) { 

}]; 

Wie sende funktionieren würde ich das Bild?

In Android Ich hatte das Bild als Bitmap und ich sende es so.

Bitmap bitmap = // contains the image 

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos); 
      multipartEntity.addPart("ecgImage", 
        new ByteArrayBody(baos.toByteArray(), "ecg.jpg")); 
      multipartEntity.addPart("dateTime", new StringBody(dateTime)); 
      multipartEntity.addPart("heartRate", 
        new StringBody(String.valueOf(heartRate))); 
      multipartEntity.addPart("qrs", new StringBody(String.valueOf(qrs))); 
      multipartEntity.addPart("result", new StringBody(result)); 
      multipartEntity.addPart("mac", new StringBody(mac)); 

Aber ich jetzt in iOS alles was ich habe ist ein UIImage. Also habe ich versucht "UIImage zu ByteArrayBody zu konvertieren", hatte aber kein Glück. Was entsprechender Code in Objective-C würde

+0

konterten nach unten Stimmen. Die Frage mag ziemlich offensichtlich sein, aber zumindest ist diese Frage richtig: zeigt relevanten gültigen Code, ist mehr als ein Satz, erwähnt, was gesucht wurde ... sehe nicht, warum es schlecht wäre –

+0

Ich habe mich auch über dasselbe gewundert . Ich habe viel gesucht, bevor ich diese Frage gepostet habe, aber nichts Brauchbares gefunden. – HeisenBerg

Antwort

1

Sie müssen es zu einem NSData Objekt konvertieren:

NSData *_imageData = UIImageJPEGRepresentation(image, 1); 
[parameters setObject:UIImageJPEGRepresentation(image, 1) forKey:@"ecgImage"]; 
+0

Kannst du mir bitte sagen, ob dies der richtige Weg ist, eine mehrteilige Anfrage mit UNIRest zu senden? Im Backend bekomme ich diesen Fehler ... org.springframework.web.multipart.MultipartException: Die aktuelle Anfrage ist keine mehrteilige Anfrage – HeisenBerg