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];