NSURLConnection异步请求在发送期间切断正文

时间:2013-01-11 21:26:18

标签: iphone cordova post nsurlconnection

我有一种方法可以定期向服务器发送数据并接收响应代码。我为它实现了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的其他测试人员的任何问题,所以这可能是处理速度的问题。我该怎样做才能收紧它并防止柱体切断?

1 个答案:

答案 0 :(得分:0)

我没有测试它,但问题可能是这个:

[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

我会尝试这个:

[urlRequest setValue:@"text/plain" forHTTPHeaderField:@"Content-Type"];

因为您正在发送基本64位编码的字符串。