gpt4 book ai didi

ios - 复制 AFHTTPRequestOperation 导致错误 "request body stream exhausted"

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:43:00 27 4
gpt4 key购买 nike

问题

我的应用允许用户上传照片。这很好用。

现在,我正在尝试在照片上传失败时实现“重试”功能,例如由于连接速度慢。

这是我的重试代码:

self.operation = [self.operation copy];  // Creates a new operation with the same NSURLRequest

[self.operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

// do success stuff

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

NSLog("%@", error);

}];

[[MyAFHTTPClient sharedClient] enqueueHTTPRequestOperation:self.operation];

启动时,调用失败 block ,输出:

$0 = 0x12636b50 Error Domain=NSURLErrorDomain Code=-1021 "request body stream exhausted" UserInfo=0x12637810 {NSErrorFailingURLStringKey=https://my/long/url/, NSErrorFailingURLKey=https://my/long/url/, NSLocalizedDescription=request body stream exhausted, NSUnderlyingError=0x13046bb0 "request body stream exhausted"}

问题

如何更改我的代码以正确重新启动图片上传?

我尝试过的

我认为问题在于 operation.request.HTTPBodyStream 是一个 NSInputStream,无法重新启动。

-[AFURLConnectionOperation connection:needNewBodyStream:] 方法似乎提供了输入流的副本。我在那里设置了一个断点;复制或开始操作时不会调用它,我不确定如何触发它。

有一些关于 similar issue on the AFNetworking GitHub page 的讨论,但这与身份验证失败后的重试有关。

其他信息

我的 URL 请求对象是使用 -[AFHTTPClient multipartFormRequestWithMethod 创建的:
小路:
参数:
构造BodyWithBlock:]

最佳答案

我会尝试这样的事情:

-(void)uploadImage:(NSData *)imageData retry:(BOOL)retry
{
AFHTTPClient *myClient = [[AFHTTPClient alloc] initWithBaseUrl:myBaseURL];
NSURLRequest *request = [myClient multipartFormRequestWithMethod:@"POST"
path:myPath
parameters:myParametersDictionary
constructingBodyWithBlock:^(id <AFMultipartFormData> formData){
[formData appendPartWithFileData:imageData
name:myImageName
fileName:myFileName
mimeType:@"image/jpg"];
}];
AFHTTPRequestOperation *operation = [myClient HTTPRequestOperationWithRequest:request
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// do success stuff
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog("%@", error);
if (retry) {
[self uploadImage:imageData
retry:NO];
}
}];
[myClient enqueueHTTPRequestOperation:operation];
}

当然第一次你会调用它 retry:YES

关于ios - 复制 AFHTTPRequestOperation 导致错误 "request body stream exhausted",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16700528/

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