2016-11-04 2 views
1

Ich tue dies, um Server in einem Array Bilder zu senden bekommen:AFNetworking 3 AFMultipartFormData Bytes Daten als Antwort

NSString *string = [NSString stringWithFormat:@"%@/API/Upload",BaseURLString]; 
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithBaseURL:[NSURL URLWithString:BaseURLString]]; 

    [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]]; 
    [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 

    for(NSData *eachImage in self.fetchedAtt) { 
    [manager POST:string 
     parameters:nil 
constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { 

    [formData appendPartWithFormData:eachImage 
           name:@"image1"]; 

} 

     progress:nil 
      success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 

       if (responseObject != nil) 
       { 
        //NSDictionary *jsonDictionary = responseObject; 
        NSLog(@"%@",responseObject); 
       } 
      } 

      failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 

       NSLog(@"%@",error.localizedDescription); 
      }]; 
    } 

Vorerst nur ein Bild senden wir zu testen. Und es wird responseObject, die Bytes Daten ist.

<696d6167 65313a20 efbfbdef bfbdefbf bdefbfbd 00104a46 49460001 01000048 00480000 efbfbdef bfbd0058 45786966 00004d4d 002a0000 00080002 01120003 00000001 00010000 efbfbd69 00040000 00010000 00260000 00000003 efbfbd01 00030000 00010001 0000efbf bd020004 00000001 0000001e efbfbd03...

Wie der Web-Guy Antwort sollte die URL des Bildes sein. Web-Backend ist in ASP.NET Was mache ich falsch?

UPDATE
Wenn ich die Antwort Serializer ändern erhalte ich:

Request failed: unacceptable content-type: application/octet-stream

Ich habe dies auch versucht:

NSString *string = [NSString stringWithFormat:@"%@/API/Upload",BaseURLString]; 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
[manager setRequestSerializer:[AFHTTPRequestSerializer serializer]]; 
[manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 
NSError *error; 

for(NSData *eachImage in self.fetchedAtt) { 

    NSURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:string parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
     //NSString *value = @"qux"; 
     //NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding]; 

// [Formdata appendPartWithFormData: eachImage Name: @ "image1 "]; [formData appendPartWithFileData: jederBildname: @ "image1" Dateiname: @ "test.jpg" mimeType: @ "image/jpeg"]; } Fehler: & Fehler];

NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 
     if (error) { 
      NSLog(@"%@", error.localizedDescription); 
      return; 
     } 

     NSLog(@"%@", responseObject); 
    }]; 
    [task resume]; 
} 

Aber erhalten Request failed: internal server error (500). wenn ich die appendPartWithFormData auskommentiere und andere Zeile kommentiere, bekomme ich gleiche Bytes in responseObject.

Weitere Updates:
Wir haben es am Postboten getestet und das Bild wurde erfolgreich hochgeladen. Aber wenn ich etwas in Parameter geben bekomme ich

Request failed: unsupported media type (415)

Antwort

1

Wenn Sie Bilder hochladen, würden Sie einige Antwort vom Server erwarten (nur zu bestätigen, dass sie erfolgreich empfangen wurden). Nachdem Sie das gesagt haben, sehen Sie sich Ihre Hexendaten an, es ist merkwürdig. Wie es aussieht ist:

enter image description here

Die "JFIF" und "Exif" Referenzen sind konsistent mit einer JPEG-Antwort. Und die image1 sieht so aus, als wäre es der Name des gesendeten Bildes. Aber das ist eine sehr merkwürdige Antwort. Es ist definitiv nicht die URL des Bildes.

sollten Sie die Web-Service-Autoren wenden und bekommen Details, was genau zurück sie schicken, weil es zu Standardantworten entspricht nicht (XML, JSON, etc.).


Übrigens sieht Ihre Methode des Hochladens des Bildes falsch aus. Sie würden in der Regel so etwas wie:

[formData appendPartWithFileData:eachImage 
          name:@"image1" 
         fileName:@"test.jpg" 
         mimeType:@"image/jpeg"]; 

Offensichtlich würden Sie die fileName und mimeType übereinstimmen angeben, was die NSData wirklich war. Und ich würde mit dem Autor des Webdienstes überprüfen, ob sie wirklich einen Feldnamen von image1 verwenden möchten ... das ist ein wenig atypisch.

+0

Großen Dank Rob :) ich Ihre Verlegenheit habe versucht, meine Frage aktualisiert und bekam 'Die Anforderung ist fehlgeschlagen: Interner Serverfehler (500)' die ein Problem aus Backend scheint. Ich werde es bis morgen aktualisieren, da der Backend-Typ für den Tag weg ist. –

+0

Ich frage mich, ob der ungewöhnliche 'image1' Feldname falsch ist (was diese Art von Problemen verursachen könnte). Es könnte Tonnen von Dingen sein. Wir können nicht sagen, ohne Server-Code oder eine klarere Definition von den Back-End-Jungs zu sehen ... – Rob

+0

Hey Rob ... Danke, dass die Probleme gelöst ist. Es war ein Backend-Problem. –

Verwandte Themen