我想知道使用 ASIHTTPRequest 是否可以解压缩 .zip 下载的文件,或者它只能解压缩 .gzip 压缩文件。
请让我知道,因为如果 ASIHTTPRequest 无法解压缩 .zip 压缩文件,那么我将不得不使用 ZipArchive 等第三方 api 来解压缩下载的文件。
谢谢
我想知道使用 ASIHTTPRequest 是否可以解压缩 .zip 下载的文件,或者它只能解压缩 .gzip 压缩文件。
请让我知道,因为如果 ASIHTTPRequest 无法解压缩 .zip 压缩文件,那么我将不得不使用 ZipArchive 等第三方 api 来解压缩下载的文件。
谢谢
为什么不使用 gzip 压缩的 HTTP 通信,它会被 ASI(以及几乎所有其他 HTTP 访问框架)透明地解码。
ASIHTTP 支持解压,例如——
- (IBAction)grabURL:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
// YES is the default, you can turn off gzip compression by setting this to NO
[request setAllowCompressedResponse:YES];
[request startSynchronous];
BOOL *dataWasCompressed = [request isResponseCompressed]; // Was the response gzip compressed?
NSData *compressedResponse = [request rawResponseData]; // Compressed data
NSData *uncompressedData = [request responseData]; // Uncompressed data
NSString *response = [request responseString]; // Uncompressed data as a string
}
更新:如果 asi 不支持 zip 文件解压缩,那么我过去曾成功使用过ZipArchive。
它非常轻巧且易于使用,支持密码保护、ZIP 内的多个文件以及压缩和解压缩。所以你需要先通过 asi 获取 zip 文件,然后 unzip 使用的是 ziparchive。
基本用法是:
NSString *filepath = [[NSBundle mainBundle] pathForResource:@"ZipFileName" ofType:@"zip"];
ZipArchive *zipArchive = [[ZipArchive alloc] init];
[zipArchive UnzipOpenFile:filepath Password:@"xxxxxx"];
[zipArchive UnzipFileTo:{pathToDirectory} overWrite:YES];
[zipArchive UnzipCloseFile];
[zipArchive release];