NSMutableURLRequest和“请求身体stream枯竭”错误
我有一个问题与HTTP PUT请求和请求正文从文件stream。
不pipe文件的大小我得到错误“NSURLErrorDomain -1021请求身体stream枯竭”
我知道我可以通过实施该方法来覆盖这个问题:
-(NSInputStream*)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)request
但这种方法不好,因为它会再次上传整个文件,而40 MB的文件竟然是80 Mb的数据传输。
如果我采取与NSData相同的文件,并设置请求正文工作正常。
我试着发送请求asynchronous并同时在两个同步结果。
这是我的代码,简单,类似于苹果的例子:
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];
难道我做错了什么? 我错过了什么?
从外观上看,你似乎没有在标题中设置@“Content-Length”。
我这样做的方式是这样的:
NSUInteger fileSize = [[[[NSFileManager defaultManager] attributesOfItemAtPath:_dataStreamLocation error:nil] objectForKey:NSFileSize] unsignedIntegerValue]; [request setValue:[NSString stringWithFormat:@"%u", fileSize] forHTTPHeaderField:@"Content-Length"];
无论哪种方式,我正在做批量上传,偶尔也会遇到身体stream枯竭的错误。 从我所知道的问题是,我只有很less的设备上的可用空间,临时文件会被自动删除之前,一些上传完成(当收到我testing的错误,以检查文件是否仍然存在,它不是)。
我遇到了同样的问题,对我来说固定的是保留stream,然后在asynchronousHTTP事务结束时释放它。 似乎这不应该是必要的,但它让我围绕这个问题。
此解决方法适用于我:
[request setTimeoutInterval:240];