//
// ViewController.m
// IOS_0206_文件上传
//
// Created by ma c on 16/2/6.
// Copyright © 2016年 博文科技. All rights reserved.
// #import "ViewController.h"
#import "SSZipArchive.h" #define BWFileBoundary @"----------BowenKeJi"
#define BWNewLine @"\r\n"
#define BWEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor cyanColor];
} - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self createZip];
}
///压缩文件
- (void)createZip
{
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" AndMIMEType:MIMEType AndfileData:data AndParams:nil];
} }
///解压缩文件
- (void)unZip
{
NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/images.zip"];
NSURLSessionDownloadTask *task = [[NSURLSession sharedSession] downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
[SSZipArchive unzipFileAtPath:location.path toDestination:caches uniqueId:nil]; }];
[task resume];
} ///文件的MIMEType
- (NSString *)MIMEType:(NSURL *)url
{
//1.创建一个请求
NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLResponse *response = nil;
//2.发送请求(返回响应)
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
//3.获得MIMEType
return response.MIMEType;
} ///文件上传封装
- (void)upload:(NSString *)filename AndMIMEType:(NSString *)mimeType AndfileData:(NSData *)fileData
AndParams:(NSDictionary *)dict
{
// 1.请求路径
NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/upload"];
// 2.创建一个POST请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
// 2.设置请求头(告诉服务器这次上传的是文件数据)
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",BWFileBoundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
// 3.设置请求体
NSMutableData *body = [NSMutableData data]; // 4.1文件参数
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWFileBoundary)];
[body appendData:BWEncode(BWNewLine)];
NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"",filename];
[body appendData:BWEncode(disposition)];
[body appendData:BWEncode(BWNewLine)]; NSString *type = [NSString stringWithFormat:@"Content-Type: %@",mimeType];
[body appendData:BWEncode(type)];
[body appendData:BWEncode(BWNewLine)]; //具体内容
[body appendData:BWEncode(BWNewLine)];
[body appendData:fileData];
[body appendData:BWEncode(BWNewLine)]; // 4.2非文件参数(用户名参数) [dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWFileBoundary)];
[body appendData:BWEncode(BWNewLine)]; NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"",key]; [body appendData:BWEncode(disposition)];
[body appendData:BWEncode(BWNewLine)]; [body appendData:BWEncode(BWNewLine)];
[body appendData:BWEncode([obj description])];
[body appendData:BWEncode(BWNewLine)]; }];
// 4.3结束标记
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWFileBoundary)];
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWNewLine)]; request.HTTPBody = body; // 5.发送请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"%@",dict);
}];
} @end

IOS-网络(文件压缩和解压缩)的更多相关文章

  1. IOS开发之网络编程--文件压缩和解压缩

    前言: QQ表情包就用到了解压缩,从网络下载的那么多表情文件格式并不是一个一个图片文件,而是多个图片压缩而成的表情压缩包.下面介绍的是iOS开发中会用到的压缩和解压缩的第三方框架的使用. 注意: 这个 ...

  2. ios开发网络学习五:MiMEType ,多线程下载文件思路,文件的压缩和解压缩

    一:MiMEType:一般可以再百度上搜索到相应文件的MiMEType,或是利用c语言的api去获取文件的MiMEType : //对该文件发送一个异步请求,拿到文件的MIMEType - (void ...

  3. iOS中使用ZipArchive压缩和解压缩文件-备

    为什么我需要解压缩文件 有许多原因能解释为什么我要在工程中使用压缩和解压缩功能,下面是几个常见的原因: 苹果App Store的50M下载限制 苹 果公司出于流量的考虑,规定在非WIFI环境下,限制用 ...

  4. Linux常用命令学习3---(文件的压缩和解压缩命令zip unzip tar、关机和重启命令shutdown reboot……)

    1.压缩和解压缩命令    常用压缩格式:.zip..gz..bz2..tar.gz..tar.bz2..rar .zip格式压缩和解压缩命令        zip 压缩文件名 源文件:压缩文件   ...

  5. [Java 基础] 使用java.util.zip包压缩和解压缩文件

    reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...

  6. 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期

    [源码下载] 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的 ...

  7. 在C#中利用SharpZipLib进行文件的压缩和解压缩收藏

    我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net(http://www.icsharpcode.net/OpenSource/SharpZipL ...

  8. IO操作之使用zip包压缩和解压缩文件

    转自:http://www.cdtarena.com/java.html​​Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使 ...

  9. Java用ZIP格式压缩和解压缩文件

    转载:java jdk实例宝典 感觉讲的非常好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,须要导入该包. 使用zipoutput ...

  10. 使用commons-compress操作zip文件(压缩和解压缩)

    http://www.cnblogs.com/luxh/archive/2012/06/28/2568758.html Apache Commons Compress是一个压缩.解压缩文件的类库. 可 ...

随机推荐

  1. 在CentOS7下从0开始搭建docker并发布tomcat项目

    一切从0开始,我也是个小白: 1.检查你的系统是不是高于3.8的内核,如果没有请升级CentOS7或者Ubuntu 14 #uname -a 2.CentOS7下安装docker #yum -y in ...

  2. Oracle等待事件之Enqueue(锁)

    1.产生原因 表示与内部队列机制相关的等待,例如对保护内部资源或者组件的锁的请求等,一种并发的保护机制,该等待意味着在访问同样的数据库资源时需要等待其他会话已经获取的锁. 2.确定产生问题的对象 死锁 ...

  3. python re.sub 括号匹配替换匹配到的内容后接数字

    如果代码为: text = re.sub(r'(?<=[{])([a-z]+)6(?=[}])', r'\13', text) 上面代码会报错,因为没有组合13,所以不能获得组合13的内容. 但 ...

  4. 洛谷P3067 平衡的奶牛群 [USACO12OPEN] meet-in-the-middle

    正解:搜索 解题报告: 先放下传送门QwQ 这题就,双向搜索经典题鸭 首先dfs应该挺好想到的我jio得?就是我们不用记录左右分别得分多少只要记下差值就好了嘛能get? 然后就先搜左边,记录下每个得分 ...

  5. 小米范工具系列之六:小米范 web查找器2.x版本发布

    小米范web查找器是一款快速识别端口及服务的小工具. 此工具使用java 1.8以上版本运行. 下载地址:http://pan.baidu.com/s/1c1NDSVe  文件名web finder ...

  6. sql server 用脚本管理作业

    转自:https://blog.csdn.net/yunye114105/article/details/6594826 摘要: 在SQL SERVER中用脚本管理作业,在绝大部分场景下,脚本都比UI ...

  7. 跟我学Makefile(六)

    shell 函数 :和反引号“`”是相同的功能 . shell 函数把执行操作系统命令后的输出作为函数返回. contents := $(shell cat foo) files := $(shell ...

  8. POJ3070:Fibonacci(矩阵快速幂模板题)

    http://poj.org/problem?id=3070 #include <iostream> #include <string.h> #include <stdl ...

  9. HDU1573:X问题(解一元线性同余方程组)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1573 题目解析;HDU就是坑,就是因为n,m定义成了__int64就WAY,改成int就A了,无语. 这题 ...

  10. js cookie的读写

    cookie是一小段信息,以键/值对的信息保存在计算机硬盘上的字符串, cookie存储容量大概在4kb,不同的浏览器厂家对cookie大小的限制有微微的差异:cookie主要的本质是“识别”,通过识 ...