【发布时间】:2011-05-20 13:26:56
【问题描述】:
我在将 http PUT 请求和请求正文作为来自文件的流时遇到问题。
无论文件大小如何,我都会收到错误“NSURLErrorDomain -1021 request body stream exhausted”
我知道我可以通过实现该方法来解决这个问题:
-(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];
我做错了吗? 我错过了什么吗?
【问题讨论】:
标签: ios objective-c cocoa-touch network-programming nsmutableurlrequest