我有一种方法可以定期将数据发送到服务器并接收响应代码。我为它实现了 NSURLConnection 的 sendAsynchronousRequest,它可以很好地处理小数据。我有机会测试发送 base64 编码的图片,这是该应用程序的一项常见任务,并且发现它在编码图像的几个字符后切断。这是涉及的代码。
// Initial setup
NSString *urlStr = @"https://example.com/";
urlRequest = [[NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]] retain];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
// The actual sending part
- (void)sendRequest:(NSString *)reqStr {
@try {
if (sendRequestStatus == kRequestState_waiting) {
sendRequestStatus = kRequestState_processing;
NSString *dataStr = [NSString stringWithFormat:@"request_data=%@",reqStr];
NSLog(@"datastr is %@",dataStr);
NSData *dataForUrl = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"nsdata length is: %i",[dataForUrl length]);
[urlRequest setHTTPBody:dataForUrl];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *res, NSData *data, NSError *err) {
// housekeeping
}];
}
}
我在日志中没有错误。打印出 dataStr 的日志语句打印出正确的数据。打印数据长度的日志语句打印出183384字节,这似乎适合图片。然而,在服务器上,帖子正文在编码图像数据开始后被截断几个字符。一个例子是/9j/4
4 是服务器收到的最后一个字符。
我正在 iPhone 3Gs 上进行测试。这是一个phonegap应用程序,在我的Android版本上测试没有问题,所以问题一定出在我发送数据的实现上。我没有从其他使用 iPhone 4 或 4s 的测试人员那里听到任何问题,因此这可能是处理速度的问题。我能做些什么来收紧它并防止柱体被切断?