iOS开发 - 文件压缩与解压缩

第三方解压缩框架——SSZipArchive

下载地址:https://github.com/samsoffes/ssziparchive

注意:需要引入libz.dylib框架

// Unzipping
NSString *zipPath = @"path_to_your_zip_file";
NSString *destinationPath [email protected]"path_to_the_folder_where_you_want_it_unzipped";
[SSZipArchive unzipFileAtPath:zipPath toDestination:destinationPath];

// Zipping
NSString *zippedPath = @"path_where_you_want_the_file_created";
NSArray *inputPaths = [NSArray arrayWithObjects:
                       [[NSBundle mainBundle] pathForResource:@"photo1" ofType:@"jpg"],
                       [[NSBundle mainBundle] pathForResource:@"photo2" ofType:@"jpg"]
                       nil];
[SSZipArchive createZipFileAtPath:zippedPath withFilesAtPaths:inputPaths];

一、技术方案

1.第三方框架:SSZipArchive

2.依赖的动态库:libz.dylib

二、压缩1

1.第一个方法

/**

zipFile :产生的zip文件的最终路径

directory : 需要进行的压缩的文件夹路径

*/

[SSZipArchive createZipFileAtPath:zipFile withContentsOfDirectory:directory];

2.第一个方法

/**

zipFile :产生的zip文件的最终路径

files : 这是一个数组,数组里面存放的是需要压缩的文件的路径

files = @[@”/Users/apple/Destop/1.png”, @”/Users/apple/Destop/3.txt”]

*/

[SSZipArchive createZipFileAtPath:zipFile withFilesAtPaths:files];

三、解压缩

/**

zipFile :需要解压的zip文件的路径

dest : 解压到什么地方

*/

[SSZipArchive unzipFileAtPath:zipFile toDestination:dest];

文件压缩实例

#import "MalJobViewController.h"
#import "SSZipArchive.h"

#define MalJobFileBoundary @"heima"
#define MalJobNewLine @"\r\n"
#define MalJobEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]

@interface MalJobViewController ()

@end

@implementation MalJobViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

}

- (NSString *)MIMEType:(NSURL *)url
{
    // 1.创建一个请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    // 2.发送请求(返回响应)
    NSURLResponse *response = nil;
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
    // 3.获得MIMEType
    return response.MIMEType;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    // 0.获得需要压缩的文件夹
    NSString *images = [caches stringByAppendingPathComponent:@"images"];

    // 1.创建一个zip文件(压缩)
    NSString *zipFile = [caches stringByAppendingPathComponent:@"images.zip"];

    BOOL result = [SSZipArchive createZipFileAtPath:zipFile withContentsOfDirectory:images];
    if(result) {
        NSString *MIMEType = [self MIMEType:[NSURL fileURLWithPath:zipFile]];
        NSData *data = [NSData dataWithContentsOfFile:zipFile];
        [self upload:@"images.zip" mimeType:MIMEType fileData:data params:@{@"username" : @"lisi"}];
    }
}

- (void)upload:(NSString *)filename mimeType:(NSString *)mimeType fileData:(NSData *)fileData params:(NSDictionary *)params
{
    // 1.请求路径
    NSURL *url = [NSURL URLWithString:@"http://192.168.15.172:8080/Server/upload"];

    // 2.创建一个POST请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"POST";

    // 3.设置请求体
    NSMutableData *body = [NSMutableData data];

    // 3.1.文件参数
    [body appendData:MalJobEncode(@"--")];
    [body appendData:MalJobEncode(MalJobFileBoundary)];
    [body appendData:MalJobEncode(MalJobNewLine)];

    NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"", filename];
    [body appendData:MalJobEncode(disposition)];
    [body appendData:MalJobEncode(MalJobNewLine)];

    NSString *type = [NSString stringWithFormat:@"Content-Type: %@", mimeType];
    [body appendData:MalJobEncode(type)];
    [body appendData:MalJobEncode(MalJobNewLine)];

    [body appendData:MalJobEncode(MalJobNewLine)];
    [body appendData:fileData];
    [body appendData:MalJobEncode(MalJobNewLine)];

    // 3.2.非文件参数
    [params enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        [body appendData:MalJobEncode(@"--")];
        [body appendData:MalJobEncode(MalJobFileBoundary)];
        [body appendData:MalJobEncode(MalJobNewLine)];

        NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"", key];
        [body appendData:MalJobEncode(disposition)];
        [body appendData:MalJobEncode(MalJobNewLine)];

        [body appendData:MalJobEncode(MalJobNewLine)];
        [body appendData:MalJobEncode([obj description])];
        [body appendData:MalJobEncode(MalJobNewLine)];
    }];

    // 3.3.结束标记
    [body appendData:MalJobEncode(@"--")];
    [body appendData:MalJobEncode(MalJobFileBoundary)];
    [body appendData:MalJobEncode(@"--")];
    [body appendData:MalJobEncode(MalJobNewLine)];

    request.HTTPBody = body;

    // 4.设置请求头(告诉服务器这次传给你的是文件数据,告诉服务器现在发送的是一个文件上传请求)
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", MalJobFileBoundary];
    [request setValue:contentType forHTTPHeaderField:@"Content-Type"];

    // 5.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
        NSLog(@"%@", dict);
    }];
}
@end

文件解压缩实例

#import "MalJobViewController.h"
#import "SSZipArchive.h"
@implementation MalJobViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/Server/resources/images.zip"];

    NSURLSessionDownloadTask *task = [[NSURLSession sharedSession] downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
        NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        [SSZipArchive unzipFileAtPath:location.path toDestination:caches];
    }];
    [task resume];
}

@end
时间: 2024-11-05 20:33:53

iOS开发 - 文件压缩与解压缩的相关文章

Huffman的应用之文件压缩与解压缩

文件压缩与解压缩> 最近这段时间一直在学习树的这种数据结构,也接触到了Huffman树以及了解了什仫是Huffman编码,而我们常用的zip压缩也是利用的Huffman编码的特性,那仫是不是可以自己实现一个文件压缩呢?当然可以了.在文件压缩中我实现了Huffman树和建堆Heap的代码,zip压缩的介绍> http://www.cricode.com/3481.html 下面开始介绍自己实现的文件压缩的思路和问题... 1).统计>读取一个文件统计这个文件中字符出现的次数. 2).建树&

Linux文件压缩与解压缩

什么是压缩文件?原理是什么? 简单的说,就是经过压缩软件压缩文件叫压缩文件,压缩的原理是把文件的二进制代码压缩,把相邻的0,1代码减少, 例如有000000,可以把它变成6个0的写法60来减少该文件的空间,同理解压缩就是按照相同的原则把数据还原回来. Linux环境中有哪些格式的压缩文件? 常见的压缩文件有*.tar,*.tar.gz,*.tgz,*.gz,*.Z,*.bz2,为啥有这么多种压缩文件?这是因为Linux支持的压缩命令非常多, 且不同的命令所用的压缩技术并不相同,当然彼此之前可能就

Linux学习笔记<十三>——文件压缩、解压缩和归档

压缩.解压缩命令: 1.compress/uncompress:压缩格式为Z,文件后缀为.Z compress /path/to/file uncompress /path/to/file.Z 2.gzip/gunzip/zcat:压缩格式为gz,文件后缀为.gz gzip [OPTION] /path/to/file:,压缩文件保存在被压缩文件的目录,压缩完成后会删除原文件 -v|verbose:显示指令执行过程 -d:解压缩,解压缩完成后删除原压缩文件 -#:1-9,指定压缩比,默认为6,数

C++实现文件压缩及解压缩

原理:Huffman树的应用:Huffman编码,为出现频率较高的字符指定较短的码字,而为出现频率较低的字符指定较短的码字,可以实现二进制文件的压缩. Heap.h #pragma once #include <vector> //仿函数 template<class T> struct Lesser { bool operator()(const T& l, const T& r) { return l < r; } }; template<class

java 文件压缩及解压缩

java操作windows命令(Rar.exe)执行文件压缩 // String srcPath = "D:\\test";// 被压缩文件夹 String srcPath = "D:\\test.txt";// 被压缩文件 String destPath = "D:\\test.rar";// 压缩后文件 String rarexePath = "C:\\Program Files\\WinRAR\\Rar.exe"; //

文件压缩、解压缩以及归档工具详解

一.简介 早期的有compress和uncompress,其对应的是.Z结尾的压缩格式文件:现在使用较多的有: gzip/gunzip,其对应的是.gz结尾的压缩格式文件: bzip2/bunzip2其对应的是.bz2结尾的压缩格式文件: xz/unxz其对应的是.xz结尾的压缩格式文件: zip/unzip其对应的是.zip结尾的压缩格式文件: 二.compress/uncompress 语法:compress [-dfvcVr] [-b maxbits] [file ...] OPTION:

【转】iOS开发之压缩与解压文件

ziparchive是基于开源代码”MiniZip”的zip压缩与解压的Objective-C 的Class,使用起来非常的简单方法:从http://code.google.com/p/ziparchive/ 上下载ZipArchive.zip,解压后将代码加入工程中,并且把zlib库添加到工程中使用方法:1. 压缩:ZipArchive可以压缩多个文件,只需要把文件一一addFileToZip即可. ZipArchive* zip = [[ZipArchive alloc] init]; NS

iOS开发之压缩与解压文件

ziparchive是基于开源代码”MiniZip”的zip压缩与解压的Objective-C 的Class,使用起来非常的简单 方法:从http://code.google.com/p/ziparchive/ 上下载ZipArchive.zip,解压后将代码加入工程中,并且把zlib库添加到工程中 使用方法: 1. 压缩:ZipArchive可以压缩多个文件,只需要把文件一一addFileToZip即可. ZipArchive* zip = [[ZipArchive alloc] init];

IOS开发—图片压缩/解压成Zip文件

图片压缩/解压成Zip文件 本文介绍如何将图片压缩成Zip文件,首先需要下载第三方库ZipArchive 并导入项目中. ZipArchive 库地址:https://github.com/mattconnolly/ZipArchive 一.文档结构: 二.准备工作: 1.框架导入: 2.ZipArchive.m文件使用非ARC机制 三.代码示例: // // ViewController.m // UnzipImgDemo // // Created byLotheve on 15/4/10.