Tôi đang sử dụng chức năng này để tải hình ảnh lên máy chủ bằng cách sử dụng JSON
. Để làm như vậy, trước tiên tôi chuyển đổi hình ảnh thành NSData
và sau đó đến NSString
bằng cách sử dụng Base64
. Phương pháp này hoạt động tốt khi hình ảnh không phải là rất lớn nhưng khi tôi cố gắng tải lên một hình ảnh 2Mb, nó bị treo.Tải lên hình ảnh lớn bằng Base64 và JSON
Sự cố là máy chủ không nhận được hình ảnh của tôi mặc dù phương thức didReceiveResponse
được gọi cũng như didReceiveData
trả về (null)
. Lúc đầu, tôi nghĩ rằng đó là một vấn đề thời gian ra, nhưng thậm chí thiết lập nó đến 1000.0 nó vẫn không hoạt động. Bất kỳ ý tưởng? Cảm ơn vì đã dành thời gian cho tôi!
Đây là mã hiện tại của tôi:
- (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]);
}
Bạn có thêm bất kỳ bản ghi trên trang web php để xem, ít nhất, các url được gọi là? như nhật ký tệp hoặc nhật ký sql? – Vinzius
Thực ra, lập trình viên phía máy chủ đã nói với tôi rằng nếu trang web nhận được bất kỳ dữ liệu nào, một phản hồi luôn được trả về. Vì vậy, kết luận của tôi là anh ta thậm chí không nhận được yêu cầu. –
Ngoài ra: việc sử dụng chữ giúp mọi thứ trở nên dễ dàng/rõ ràng hơn: 'NSDictionary * jsonDictionary = @ {@" design ": imageString};' – zaph