0

我有一种方法可以定期将数据发送到服务器并接收响应代码。我为它实现了 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/44 是服务器收到的最后一个字符。

我正在 iPhone 3Gs 上进行测试。这是一个phonegap应用程序,在我的Android版本上测试没有问题,所以问题一定出在我发送数据的实现上。我没有从其他使用 iPhone 4 或 4s 的测试人员那里听到任何问题,因此这可能是处理速度的问题。我能做些什么来收紧它并防止柱体被切断?

4

1 回答 1

0

我没有测试它,但也许问题是这样的:

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

我会尝试这个:

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

因为您正在发送一个 base 64 编码的字符串。

于 2013-03-19T13:52:28.060 回答