gpt4 book ai didi

ios - Mulipartpost NSURLConnection over 3G 网络问题

转载 作者:行者123 更新时间:2023-11-29 10:58:50 25 4
gpt4 key购买 nike

我们有一个 iOS 应用程序可以使用多部分发布将图像上传到服务器。使用 wifi 时一切正常,但在 3G 上处理大图像时出现网络错误。

在客户端(iPhone)上:

我有一个

Domain=NSURLErrorDomain Code=-1021 “request body stream exhausted”

基于 this post我尝试通过该方法使用 AFNetwork 库,但仍然得到完全相同的结果。

在服务器上:

我已经设置了一个代理来查看请求并且我得到了

"Socket broken pipe"

通常在传输完 740Kb 之后

那么,我做错了什么?就像我说的,通过 wifi 一切正常,在 3G 上使用小图像也很好。

AFNetwork 版本代码(在 600 - 800 kb 后停止传输大图像):

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:self.baseURL];

request = [client multipartFormRequestWithMethod:@"POST"
path:nil
parameters:nil
constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
{

for (NSString* partType in self.parts) {
if ([partType isEqualToString:@"jsonpart"]) {
[formData appendPartWithFormData:[self.parts objectForKey:partType] name:@"@json"];
}
else{ //is an image for sure
[formData appendPartWithFileData:[self.parts objectForKey:partType]
name:partType
fileName:[NSString stringWithFormat:@"%@-%d.jpg", partType, [partType hash]]
mimeType:@"image/jpeg"];
}

}

[formData throttleBandwidthWithPacketSize:kAFUploadStream3GSuggestedPacketSize delay:kAFUploadStream3GSuggestedDelay];
}];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

[client enqueueHTTPRequestOperation:operation];

最佳答案

澄清错误的含义,以及它可能来自哪里:

当已使用 HTTPBodyStream 设置请求并显式设置 Content-Length header ,并且输入流未提供 Content-Length header 中指定的字节数时,您会收到此错误。也就是说,在可以从流中读取规定的字节数之前,底层连接从输入流中获得了 EOF。

因此,原因可能是多部分主体内容的长度计算不正确。这很有可能,因为计算多部分的长度很容易出错。

如果您收到重定向响应并且输入流已经打开并且可能已经读取了一些数据,也会发生错误。重定向响应要求输入流将“倒带”,以便在收到正确响应时可以从头开始读取。这不会自动发生,并且必须在委托(delegate)中显式实现。 (看看 AFNetworking 是否在重定向的情况下以某种方式“倒带”输入流 - 即是否实现了 connection:needNewBodyStream:)。

我怀疑,当运行循环中存在一些微妙的死锁时,错误也可能会发生,这会阻止连接读取流 - 或者流从其源读取。

也可能发生,这个错误是另一个错误的副作用 - 这个错误掩盖了原来的错误。

在 AFNetworking 中用于完成多部分表单请求的 NSInputStream 的内部子类也可能存在错误。恕我直言,实现有点可疑,其他地方肯定存在关于流的潜在错误。

关于ios - Mulipartpost NSURLConnection over 3G 网络问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16983985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com