gpt4 book ai didi

ios - NSMutableURLRequest 和 "request body stream exhausted"错误

转载 作者:可可西里 更新时间:2023-11-01 05:48:21 24 4
gpt4 key购买 nike

我对 http PUT 请求和请求正文作为来自文件的流有问题。

无论文件大小如何,我都会收到错误“NSURLErrorDomain -1021 请求正文流耗尽”

我知道我可以通过实现以下方法来解决这个问题:

-(NSInputStream*)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)request

但这种方法并不好,因为它会重新上传整个文件,40 MB 的文件变成了 80 Mb 的数据传输。

如果我采用与 NSData 相同的文件并设置请求正文,它工作正常。

我尝试在两者中发送请求异步和同步相同的结果。

这是我的代码,简单且类似于 Apple 的示例:

NSURL *url = [NSURL URLWithString:[self concatenatedURLWithPath:path]];
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url];
[req setHTTPMethod:@"PUT"];
[req setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setTimeoutInterval:DEFAULT_TIMEOUT];
[req setValue:_contentType forHTTPHeaderField:@"Content-Type"];
NSInputStream *fileStream = [NSInputStream inputStreamWithFileAtPath:_dataStreamLocation];

[req setHTTPBodyStream:fileStream];
_connection = [[NSURLConnection connectionWithRequest:req delegate:self] retain];

我做错了什么吗?我错过了什么吗?

最佳答案

从外观上看,您似乎没有在 header 中设置@"Content-Length"。

我的做法是这样的:

NSUInteger fileSize = [[[[NSFileManager defaultManager] attributesOfItemAtPath:_dataStreamLocation error:nil] objectForKey:NSFileSize] unsignedIntegerValue];
[request setValue:[NSString stringWithFormat:@"%u", fileSize] forHTTPHeaderField:@"Content-Length"];

无论哪种方式,我都在进行批量上传,偶尔会遇到正文流耗尽错误。据我所知,问题是我的设备上只有很少的可用空间,临时文件会在一些上传完成之前自动删除(收到错误时我测试了文件是否仍然存在,并且它不是)。

关于ios - NSMutableURLRequest 和 "request body stream exhausted"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4359531/

24 4 0