我有一种方法可以定期向服务器发送数据并接收响应代码。我为它实现了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的其他测试人员的任何问题,所以这可能是处理速度的问题。我该怎样做才能收紧它并防止柱体切断?
答案 0 :(得分:0)
我没有测试它,但问题可能是这个:
[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
我会尝试这个:
[urlRequest setValue:@"text/plain" forHTTPHeaderField:@"Content-Type"];
因为您正在发送基本64位编码的字符串。