//
// 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. javascript关闭网页的几种方法

    js关闭当前页面(窗口)的几种方式总结,需要的朋友可以参考一下: 1. 不带任何提示关闭窗口的js代码 <a href="javascript:window.opener=null;w ...

  2. Java 算法-快速幂

    1 什么是快速幂? 快速幂,顾名思义就是快速的求次幂,例如:a^b,普通的算法就是累乘,这样的计算方法的时间复杂度就是O(n),而快速幂的方法使得次幂的计算方法的时间复杂度降低到O(logn).  假 ...

  3. matplotlib-曲线和折线案例

    matplotlib-曲线和折线案例 import matplotlib.pyplot as plt import numpy as np x = np.linspace(-5, 5, 100) pr ...

  4. Spark Core (一) 什么是RDD的Transformation和Action以及Dependency(转载)

    1. Spark的RDD RDD(Resilient Distributed Datasets),弹性分布式数据集,是对分布式数据集的一种抽象. RDD所具备5个主要特性: 一组分区列表 计算每一个数 ...

  5. Windows7系统运行hadoop报Failed to locate the winutils binary in the hadoop binary path错误

    程序运行的过程中,报Failed to locate the winutils binary in the hadoop binary path  Java.io.IOException: Could ...

  6. SAMBA服务器的安装和配置实践

    实验需求:1) 使用RPM包安装samba服务 2) 实现匿名访问,验证可以读写文件.目录 3) 实现指定用户的访问 4) 实现指定用户的访问,并为用户赋予不同的权限 启动LINUX系统,进行SAMB ...

  7. hdu5057 分块处理,当数值大于数据范围时树状数组 真是巧 将大数据分为小数据来处理

    这题说的给了100000个数有100000次操作 询问 L和R 区间内 在D位上为P的个数,用树状数组存 要开[10][10][100000]的int 开不了但是能开 这么大的unsign short ...

  8. CSS实现超出DIV宽度文字自动隐藏并显示省略号

    当文字超出DIV宽度时,超出的文字部分省略,并用显示省略号代替,css代码如下: div.ellipsis { padding-left: 5px; text-align: left; text-ov ...

  9. mongodb的分片(2)

    在上一片博客,详细说明了mongodb的分片搭建的详细过程:分片搭建 在这里会说一些分片的维护与操作! 在集群搭建完,我们使用了sh.status()查看分片之后的数据,如下: #连接的是mongos ...

  10. 20145314郑凯杰《网络对抗技术》可选实验 shellcode注入与Return-to-libc攻击实验

    20145314郑凯杰<网络对抗技术>可选实验 shellcode注入与Return-to-libc攻击实验 1.0 实践内容 Return-to-libc攻击是一种特殊的缓冲区溢出攻击, ...