Hochladen großer Bilder mit Base64 und JSON

Ich verwende diese Funktion, um ein Bild hochladen zu einem server mithilfe JSON. Um dies zu tun, muss ich zuerst konvertieren Sie das Bild in NSData und dann zu NSString mit Base64. Die Methode funktioniert gut, wenn das Bild nicht sehr groß, aber wenn ich versuche zum hochladen 2Mb Bild, stürzt es ab.

Das problem ist, dass der server nicht erhalten, mein Bild, obwohl die didReceiveResponse - Methode aufgerufen wird, sowie die didReceiveData gibt (null). Zuerst dachte ich, es war ein time-out Problem, aber auch die Einstellung 1000.0 es funktioniert immer noch nicht. Irgendeine Idee? Vielen Dank für Ihre Zeit!

Hier ist meine aktuelle code:

 - (void) imageRequest {

   NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.myurltouploadimage.com/services/v1/upload.json"]];

   NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
   NSString *path = [NSString stringWithFormat:@"%@/design%i.png",docDir, designNum];
   NSLog(@"%@",path);

   NSData *imageData = UIImagePNGRepresentation([UIImage imageWithContentsOfFile:path]);
   [Base64 initialize];
   NSString *imageString = [Base64 encode:imageData];

   NSArray *keys = [NSArray arrayWithObjects:@"design",nil];
   NSArray *objects = [NSArray arrayWithObjects:imageString,nil];
   NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

   NSError *error;
   NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary options:kNilOptions error:&error];

   [request setHTTPMethod:@"POST"];
   [request setValue:[NSString stringWithFormat:@"%d",[jsonData length]] forHTTPHeaderField:@"Content-Length"];
   [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
   [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
   [request setHTTPBody:jsonData];

   [[NSURLConnection alloc] initWithRequest:request delegate:self];

   NSLog(@"Image uploaded");

}

 - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

   NSLog(@"didReceiveResponse");

}

 - (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

   NSLog(@"%@",[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]);

}
Haben Sie irgendwelche Protokolle auf der php-Webseite, um zu sehen, wenn wenigstens die url aufgerufen wird? wie eine log-Datei oder sql-log?
Tatsächlich, die server-side-Programmierer sagte mir, dass, wenn die website erhält alle Daten, eine Antwort kommt immer zurück. Also, mein Fazit ist, dass er nicht einmal die Anfrage erhalten.
Beiseite: mit literalen macht die Dinge einfacher/übersichtlicher: NSDictionary *jsonDictionary = @{@"design":imageString};
Was ist die Antwort, die Sie erhalten? Wenn Sie wirklich wollen, um herauszufinden, was Los ist auf der Draht-Holen Sie sich einen sniffer wie Charles (Kostenlose Testversion). Ich benutze es die ganze Zeit auch funktioniert SSL.
Überprüfen Sie heraus meine Antwort hier, und es wird Ihnen helfen. stackoverflow.com/questions/10524323/...

InformationsquelleAutor IOS_DEV | 2013-02-16

Schreibe einen Kommentar