iOS开发——网络编程OC篇&(八)文件压缩与解压

文件压缩与解压

一、技术方案
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];

一:文件压缩

 1 - (NSString *)MIMEType:(NSURL *)url
 2 {
 3     // 1.创建一个请求
 4     NSURLRequest *request = [NSURLRequest requestWithURL:url];
 5     // 2.发送请求(返回响应)
 6     NSURLResponse *response = nil;
 7     [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
 8     // 3.获得MIMEType
 9     return response.MIMEType;
10 }
11
12 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
13 {
14     NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
15
16     // 0.获得需要压缩的文件夹
17     NSString *images = [caches stringByAppendingPathComponent:@"images"];
18
19     // 1.创建一个zip文件(压缩)
20     NSString *zipFile = [caches stringByAppendingPathComponent:@"images.zip"];
21
22     BOOL result = [SSZipArchive createZipFileAtPath:zipFile withContentsOfDirectory:images];
23     if(result) {
24         NSString *MIMEType = [self MIMEType:[NSURL fileURLWithPath:zipFile]];
25         NSData *data = [NSData dataWithContentsOfFile:zipFile];
26         [self upload:@"images.zip" mimeType:MIMEType fileData:data params:@{@"username" : @"lisi"}];
27     }
28 }
29
30
31 - (void)upload:(NSString *)filename mimeType:(NSString *)mimeType fileData:(NSData *)fileData params:(NSDictionary *)params
32 {
33     // 1.请求路径
34     NSURL *url = [NSURL URLWithString:@"http://192.168.15.172:8080/MJServer/upload"];
35
36     // 2.创建一个POST请求
37     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
38     request.HTTPMethod = @"POST";
39
40     // 3.设置请求体
41     NSMutableData *body = [NSMutableData data];
42
43     // 3.1.文件参数
44     [body appendData:iCocosEncode(@"--")];
45     [body appendData:iCocosEncode(iCocosFileBoundary)];
46     [body appendData:iCocosEncode(iCocosNewLien)];
47
48     NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"", filename];
49     [body appendData:iCocosEncode(disposition)];
50     [body appendData:iCocosEncode(iCocosNewLien)];
51
52     NSString *type = [NSString stringWithFormat:@"Content-Type: %@", mimeType];
53     [body appendData:iCocosEncode(type)];
54     [body appendData:iCocosEncode(iCocosNewLien)];
55
56     [body appendData:iCocosEncode(iCocosNewLien)];
57     [body appendData:fileData];
58     [body appendData:iCocosEncode(iCocosNewLien)];
59
60     // 3.2.非文件参数
61     [params enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
62         [body appendData:iCocosEncode(@"--")];
63         [body appendData:iCocosEncode(iCocosFileBoundary)];
64         [body appendData:iCocosEncode(iCocosNewLien)];
65
66         NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"", key];
67         [body appendData:iCocosEncode(disposition)];
68         [body appendData:iCocosEncode(iCocosNewLien)];
69
70         [body appendData:iCocosEncode(iCocosNewLien)];
71         [body appendData:iCocosEncode([obj description])];
72         [body appendData:iCocosEncode(iCocosNewLien)];
73     }];
74
75     // 3.3.结束标记
76     [body appendData:iCocosEncode(@"--")];
77     [body appendData:iCocosEncode(iCocosFileBoundary)];
78     [body appendData:iCocosEncode(@"--")];
79     [body appendData:iCocosEncode(iCocosNewLien)];
80
81     request.HTTPBody = body;
82
83     // 4.设置请求头(告诉服务器这次传给你的是文件数据,告诉服务器现在发送的是一个文件上传请求)
84     NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", iCocosFileBoundary];
85     [request setValue:contentType forHTTPHeaderField:@"Content-Type"];
86
87     // 5.发送请求
88     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
89         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
90         NSLog(@"%@", dict);
91     }];
92 }

二:文件解压

1 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
2 {
3     NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/images.zip"];
4     NSURLSessionDownloadTask *task = [[NSURLSession sharedSession] downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
5         NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
6         [SSZipArchive unzipFileAtPath:location.path toDestination:caches];
7     }];
8     [task resume];
9 }
时间: 2024-10-03 13:40:08

iOS开发——网络编程OC篇&(八)文件压缩与解压的相关文章

iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备

XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容. 有许多的IM系统,如AOL IM.Yahoo IM. MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议. 协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已经出现过

iOS开发——网络编程OC篇&(五)网络监控

网络监控 随着移动网络升级:2G->3G->4G甚至相传正在研发的5G,网络速度是越来越快,但这流量也像流水一般哗哗的溜走. 网上不是流传一个段子: 睡觉忘记关流量,第二天房子就归移动了! 这固然是一种夸张的说法,但是作为一个优秀的App开发人员,我们需要在App中给出最恰当的提示. 在需要花费大量流量的时候(例如:视频,下载等)给出一些提示. 在用户视频期间用户切换网络的时候给出是否继续观看的提示! 下面笔者就给出一种可以实时监控网络状态改变的方法! 笔者使用的是网络流传最广的网络监控类:R

iOS开发——网络编程OC篇&(九)数据解析

数据解析 关于iOS开发的中数据解析的方法有两种JSON和XML,这里只做简单的介绍,会使用就可以了. JSON—— 关于JSON的解析经过很多爱好者的分析使用相同自带的还是最好的,不管是从使用的容易度还是性能方面 NSJSONSerialization 1 -(void)start 2 { 3 4 NSString* path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"json"]; 5

iOS开发——网络编程OC篇&(三)数据请求

一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:urlStr]; 4 5 // 2.创建请求对

iOS开发——网络编程OC篇&(一)服务器搭建

搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache-tomcat-6.0.41.tar eclipse-jee-kepler-SR2-macosx-cocoa-x86_64.tar.gz jdk-8u5-macosx-x64.dmg 二.安装和配置本地服务器环境(java)步骤: (1)在文档路径下,新建一个文件夹(NetWord),解压eclipse压缩包文件 (2

iOS开发——网络编程OC篇&(七)文件上传

一.文件上传的步骤1.设置请求头* 目的:告诉服务器请求体里面的内容并非普通的参数,而是包含了文件参数[request setValue:@"multipart/form-data; boundary=iCocos" forHTTPHeaderField:@"Content-Type"]; 2.设置请求体* 作用:存放参数(文件参数和非文件参数)1> 非文件参数[body appendData:iCocosEncode(@"--iCocos\r\n&

iOS开发——网络编程OC篇&Socket编程

Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议   对应于应用层 tcp协议    对应于传输层 ip协议     对应于网络层 三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要

iOS开发——网络编程OC篇&总结

网络开发总结 一.一个HTTP请求的基本要素 1.请求URL:客户端通过哪个路径找到服务器 2.请求参数:客户端发送给服务器的数据 * 比如登录时需要发送的用户名和密码 3.返回结果:服务器返回给客户端的数据 * 一般是JSON数据或者XML数据 二.基本的HTTP请求的步骤(移动客户端)1.拼接"请求URL" + "?" + "请求参数" * 请求参数的格式:参数名=参数值 * 多个请求参数之间用&隔开:参数名1=参数值1&参数

iOS开发——网络编程OC篇&(十)NSURLConnection/NSSeccession

一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... (3)NSMutableURLRequest:NSURLRequest的子类 (4)NSURLConnection:负责发送请求,建立客户端和服务器的连接.发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据 二.NSURLConnection的使用 1.简单说明 使用NSURL