AFHTTPRequestOperationManager nach mehrteiliger Anforderung funktioniert nicht
Hier ist die Vorlage, die ich aus dem Git Doc verwende
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"foo": @"bar"};
[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
Hier ist, wie ich es benutze
-(void)postMultipartToServer
{
if (!self.destinationUrl) {
return;
}
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSLog(@"IS dictionary empty? %@", self.textDictionary);
[manager POST:self.destinationUrl
parameters:self.textDictionary
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
if ([self.imageDictionaries count]>0)
for (NSDictionary *imgDic in self.imageDictionaries) {
[formData appendPartWithFileData:UIImagePNGRepresentation([imgDic objectForKey:@"image"])
name:[imgDic objectForKey:@"name"]//@"image"
fileName:[imgDic objectForKey:@"fileName"]//@"image.png"
mimeType:[imgDic objectForKey:@"mimeType"]//@"image/png"
];
}
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
Aus irgendeinem Grund werden die Bilder erfolgreich auf den Server hochgeladen, die Textteile jedoch nicht. Also hier ist mein Textwörterbuch
NSDictionary *textDictionary = @{
@"userid”:self.userid,
@"phone":self.phone,
@"token”:self.userToken,
@“age”:self.ageAsString,
@“spouse”:self.spouse,
@"isFamouse”:@”true"};
Der Server beschwert sich weiterhin darüberphone
ist beispielsweise null. Wenn ich mir die Server Logs ansehe, kommen keine Daten reintextDictionary
macht es auf den Server.
Bevor jemand sagt, es ist mein Server: iOS ist nicht der einzige Client. Alle anderen Clients funktionieren einwandfrei. Aus welchem Grund auch immer, dietextDictionary
wird nicht gesendet.
Ich begrüße jede Hilfe von jemandem, der mit AFHTTPRequestOperationManager vertraut ist.
Hier ist das Fehlerprotokoll
Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: internal server error (500)" UserInfo=0x170477840 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x178225140>
Als ich versuchte, den Fehler zu stoppen, nahm ich die Bearbeitung vor, änderte sie jedoch nicht: Ich fügte hinzu
AFSecurityPolicy *policy = [[AFSecurityPolicy alloc] init];
[policy setAllowInvalidCertificates:YES];
AFHTTPRequestOperationManager *operationManager = [AFHTTPRequestOperationManager manager];
[operationManager setSecurityPolicy:policy];
operationManager.requestSerializer = [AFJSONRequestSerializer serializer];
operationManager.responseSerializer = [AFJSONResponseSerializer serializer];
FÜR REFERENZEN IST HIER DER ÄQUIVALENTE ANDROID-CODE, DER OHNE PROBLEM FUNKTIONIERT
public static void saveTextsAndImagesOnServer(List<byte[]> images, long someID1, String servingUrl, boolean someFlag)
throws ClientProtocolException, IOException {
Log.d(TAG, "saveTextsAndImagesOnServer started ");
HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(servingUrl);
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
AdditionData extr = AdditionData.getInstance();
reqEntity.addPart("red", new ByteArrayBody(("" + extr.getred()).getBytes(), "red"));
reqEntity.addPart("yellow", new ByteArrayBody(extr.getyellow.getBytes(), "yellow"));
reqEntity.addPart("green", new ByteArrayBody(extr.getgreen().getBytes(), "green"));
reqEntity.addPart("blue", new ByteArrayBody((extr.getblue()).getBytes(), "blue"));
reqEntity.addPart("someID1", new ByteArrayBody(("" + someID1).getBytes(), "someID1"));
if (someFlag) {
reqEntity.addPart("someFlag", new ByteArrayBody("true".getBytes(), "someFlag"));
}
int i = 0;
for (byte[] img : images) {
ByteArrayBody image = new ByteArrayBody(img, "img" + i++ + ".png");
reqEntity.addPart("image", image);
}
postRequest.setEntity(reqEntity);
HttpResponse response = httpClient.execute(postRequest);
Log.d(TAG, "saveTextsAndImagesOnServer ended with response " + response.toString());
}