开发中,我们经常会遇到这种情况:后台给了一个有效的url,我们在前台展示的时候需要显示这个文件的名称、大小等信息。今天我就遇到了这种情况,在获取文件大小的时候遇到了麻烦。
以下是简单的程序代码:
-(void)getFileSizeWithFileUrl:(NSString *)fileUrl{
NSMutableURLRequest *mURLRequest;
mURLRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:fileUrl]];
[mURLRequest setHTTPMethod:@"HEAD"];
mURLRequest.timeoutInterval = 5.0;
NSURLConnection *URLConnection = [NSURLConnection connectionWithRequest:mURLRequest delegate:self];
[URLConnection start];
}
可
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
LGJLog(@"%lld",response.expectedContentLength);
NSDictionary *dict = [(NSHTTPURLResponse *)response allHeaderFields];
NSNumber *length = [dict objectForKey:@"Content-Length"];
LGJLog(@"%@",length);
[connection cancel];
}
的结果中却发现response.expectedContentLength=-1,length=nil,显然这个结果是错误的。
查了一些资料了解到Accept-Encoding默认的是gzip,压缩文件系统无法知道文件的大小,所以给返回-1。
这样就好解决了,我们在设置请求头的时候加入作下设置即可。
[mURLRequest setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];
对于iOS是这样,当然安卓也是一样的原因,在Header中加入:
Request.Builder().addHeader("Accept-Encoding", "identity")
即可。