ich diese Funktion ist mit einem Bild auf einen Server hochladen JSON
verwenden. Um dies zu tun, konvertiere ich zuerst das Bild zu NSData
und dann NSString
mit Base64
. Die Methode funktioniert gut, wenn das Bild nicht sehr groß ist, aber wenn ich versuche, ein 2Mb-Bild hochzuladen, stürzt es ab.Hochladen von großen Bildern mit Base64 und JSON
Das Problem ist, dass der Server mein Bild nicht empfängt, obwohl die didReceiveResponse
-Methode aufgerufen wird, sowie die didReceiveData
, die (null)
zurückgibt. Zuerst dachte ich, es wäre ein Time-Out-Problem, aber selbst wenn es auf 1000 gesetzt wird, funktioniert es immer noch nicht. Irgendeine Idee? Vielen Dank für Ihre Zeit!
Hier ist mein aktueller 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 fügen Sie Protokolle auf der PHP-Webseite zu sehen, ob zumindest ist die URL genannt? Wie ein Dateiprotokoll oder SQL-Protokoll? – Vinzius
Eigentlich hat der serverseitige Programmierer mir gesagt, dass, wenn die Website irgendwelche Daten erhält, immer eine Antwort zurückgegeben wird. Also, meine Schlussfolgerung ist, dass er die Anfrage nicht einmal erhält. –
Beiseite: Verwendung von Literalen macht die Dinge einfacher/klarer: 'NSDictionary * jsonDictionary = @ {@" design ": imageString};' – zaph