----------

1、SSZipArchive 压缩解压缩 文件  
需要手动添加 libz动态库  
[SSZipArchive unzipFileAtPath:location.path toDestination:caches];    [SSZipArchive createZipFileAtPath:location.path withContentsOfDirectory:images];

2、AFN代码 (相当于jquery.js的$.post $.get  只要会用就好  不用深究)

AFN 工作中经常用到  做文件上传   GET POST请求     ASI应付面试和旧项目  已经淘汰了
AFN 文件下载还是采用NSURLSession 自动放到沙盒   因为2个差不多

明天的内容  AFN 监控网络状态  取代 Reachability 监控网络连接使用的是wifi还是手机自带网络(3g/4g)
#import “AFNetworking.h"

AFN网络状态监听 取代Reachability

AFN GET POST代码

/***  利用AFN发送一个GET请求,服务器返回的JSON数据*/
- (void)getJSON
{// 1.创建一个请求操作管理者AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];// 声明一下:服务器返回的是JSON数据//    mgr.responseSerializer = [AFJSONResponseSerializer serializer];// responseObject的类型是NSDictionary或者NSArray// 2.请求参数NSMutableDictionary *params = [NSMutableDictionary dictionary];params[@"username"] = @"哈哈哈";params[@"pwd"] = @"123";// 3.发送一个GET请求NSString *url = @"http://localhost:8080/MJServer/login";[mgr GET:url parameters:paramssuccess:^(AFHTTPRequestOperation *operation, id responseObject) {// 请求成功的时候调用这个blockNSLog(@"请求成功---%@", responseObject);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {// 请求失败的时候调用调用这个blockNSLog(@"请求失败");}];
}

AFN文件上传代码:图片上传

//
//  HMViewController.m

#import "HMViewController.h"
#import "AFNetworking.h"@interface HMViewController () <UINavigationControllerDelegate, UIImagePickerControllerDelegate,UIActionSheetDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
- (IBAction)upload;
@end@implementation HMViewController- (void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.
}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"请选择图片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照", @"相册", nil];[sheet showInView:self.view.window];
}#pragma mark - UIActionSheet
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{UIImagePickerController *ipc = [[UIImagePickerController alloc] init];// 设置代理ipc.delegate = self;switch (buttonIndex) {case 0: { // 拍照if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) return;ipc.sourceType = UIImagePickerControllerSourceTypeCamera;break;}case 1: { // 相册if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) return;ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;break;}default:break;}// 显示控制器
    [self presentViewController:ipc animated:YES completion:nil];
}#pragma mark - UIImagePickerControllerDelegate
/***  在选择完图片后调用**  @param info   里面包含了图片信息*/
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{// 销毁控制器
    [picker dismissViewControllerAnimated:YES completion:nil];// 获得图片UIImage *image = info[UIImagePickerControllerOriginalImage];// 显示图片self.imageView.image = image;
}- (void)upload1
{// 1.创建一个管理者AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];// 2.封装参数(这个字典只能放非文件参数)NSMutableDictionary *params = [NSMutableDictionary dictionary];params[@"username"] = @"123";params[@"age"] = @20;params[@"pwd"] = @"456";params[@"height"] = @1.55;// 2.发送一个请求NSString *url = @"http://localhost:8080/MJServer/upload";[mgr POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {// 在发送请求之前会自动调用这个block// 需要在这个block中添加文件参数到formData中/**FileURL : 需要上传的文件的URL路径name : 服务器那边接收文件用的参数名fileName : (告诉服务器)所上传文件的文件名mimeType : 所上传文件的文件类型*/NSURL *url = [[NSBundle mainBundle] URLForResource:@"itcast" withExtension:@"txt"];[formData appendPartWithFileURL:url name:@"file" fileName:@"test.txt" mimeType:@"text/plain" error:nil];/**FileData : 需要上传的文件的具体数据name : 服务器那边接收文件用的参数名fileName : (告诉服务器)所上传文件的文件名mimeType : 所上传文件的文件类型*///        UIImage *image = [UIImage imageNamed:@"minion_01"];//        NSData *fileData = UIImagePNGRepresentation(image);//        [formData appendPartWithFileData:fileData name:@"file" fileName:@"haha.png" mimeType:@"image/png"];} success:^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"上传成功");} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"上传失败");}];
}- (IBAction)upload {if (self.imageView.image == nil) return;// 1.创建一个管理者AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];// 2.封装参数(这个字典只能放非文件参数)NSMutableDictionary *params = [NSMutableDictionary dictionary];params[@"username"] = @"123";params[@"age"] = @20;params[@"pwd"] = @"456";params[@"height"] = @1.55;// 2.发送一个请求NSString *url = @"http://192.168.15.172:8080/MJServer/upload";[mgr POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {NSData *fileData = UIImageJPEGRepresentation(self.imageView.image, 1.0);[formData appendPartWithFileData:fileData name:@"file" fileName:@"haha.jpg" mimeType:@"image/jpeg"];// 不是用这个方法来设置文件参数
//        [formData appendPartWithFormData:fileData name:@"file"];} success:^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"上传成功");} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"上传失败");}];// 文件下载,文件比较大,断点续传技术:普遍所有的HTTP服务器都支持// 文件上传,文件比较大,断点续传技术:一般的HTTP服务器都不支持,常用的技术用的是Socket(TCP\IP、UDP)
}
@end

AFN - 监听网络状态 改变 代码

//
//  HMViewController.m

#import "HMViewController.h"
#import "AFNetworking.h"@interface HMViewController ()@end@implementation HMViewController- (void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.
    AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];[mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {// 当网络状态发生改变的时候调用这个blockswitch (status) {case AFNetworkReachabilityStatusReachableViaWiFi:NSLog(@"WIFI");break;case AFNetworkReachabilityStatusReachableViaWWAN:NSLog(@"自带网络");break;case AFNetworkReachabilityStatusNotReachable:NSLog(@"没有网络");break;case AFNetworkReachabilityStatusUnknown:NSLog(@"未知网络");break;default:break;}}];// 开始监控
    [mgr startMonitoring];
}- (void)dealloc
{[[AFNetworkReachabilityManager sharedManager] stopMonitoring];
}@end

----------

AFN

AFN对 NSURLConnection 和 NSURLSession的封装   使用简单

ASI对CFNetworking(C语言写的)进行封装   运行效率高  但是使用麻烦

一、2大管理对象
1.AFHTTPRequestOperationManager
* 对NSURLConnection的封装2.AFHTTPSessionManager
* 对NSURLSession的封装二、AFHTTPRequestOperationManager的具体使用
1.创建管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];2.封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"username"] = @"哈哈哈";
params[@"pwd"] = @"123";3.发送请求
NSString *url = @"http://localhost:8080/MJServer/login";
[mgr POST:url parameters:paramssuccess:^(AFHTTPRequestOperation *operation, id responseObject) {  //这里是主线程// 请求成功的时候调用这个blockNSLog(@"请求成功---%@", responseObject);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {// 请求失败的时候调用调用这个blockNSLog(@"请求失败");}];
// GET请求
[mgr GET:url parameters:paramssuccess:^(AFHTTPRequestOperation *operation, id responseObject) {// 请求成功的时候调用这个blockNSLog(@"请求成功---%@", responseObject);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {// 请求失败的时候调用调用这个blockNSLog(@"请求失败");}];三、对服务器返回数据的解析
1.AFN可以自动对服务器返回的数据进行解析
* 默认将服务器返回的数据当做JSON来解析2.设置对服务器返回数据的解析方式
1> 当做是JSON来解析(默认做法)
* mgr.responseSerializer = [AFJSONResponseSerializer serializer];
* responseObject的类型是NSDictionary或者NSArray2> 当做是XML来解析
* mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];
* responseObject的类型是NSXMLParser3> 直接返回data
* 意思是:告诉AFN不要去解析服务器返回的数据,保持原来的data即可
* mgr.responseSerializer = [AFHTTPResponseSerializer serializer];3.注意
* 服务器返回的数据一定要跟responseSerializer对得上
1> 服务器返回的是JSON数据
* AFJSONResponseSerializer
* AFHTTPResponseSerializer2> 服务器返回的是XML数据
* AFXMLParserResponseSerializer
* AFHTTPResponseSerializer3> 服务器返回的是其他数据
* AFHTTPResponseSerializer

文件上传 就是一个POST请求
我的电脑文件上传位置修改一下
eclipse改一下文件位置
--------------

所以这里还没学socket技术    服务器配置socket   才能支持socket上传

------------

-------------------

这里不用看

文件上传POST拼接

文件上传基础代码(不用自己敲代码)

//
//  HMViewController.m

#import "HMViewController.h"
#define HMFileBoundary @"heima"
#define HMNewLien @"\r\n"
#define HMEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]@interface HMViewController ()@end@implementation HMViewController- (void)viewDidLoad
{[super viewDidLoad];}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{[self upload];
}/*参数1参数2结束标记*//** 文件参数heimaContent-Disposition: form-data; name="参数名"; filename="文件名"Content-Type: 文件类型(MIMEType)文件具体数据* 非文件参数heimaContent-Disposition: form-data; name="参数名"参数值*/- (void)upload
{// 1.请求路径NSURL *url = [NSURL URLWithString:@"http://192.168.15.172:8080/MJServer/upload"];// 2.创建一个POST请求NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"POST";// 3.设置请求体NSMutableData *body = [NSMutableData data];// 3.1.文件参数[body appendData:HMEncode(@"--")];[body appendData:HMEncode(HMFileBoundary)];[body appendData:HMEncode(HMNewLien)];[body appendData:HMEncode(@"Content-Disposition: form-data; name=\"file\"; filename=\"test123.png\"")];[body appendData:HMEncode(HMNewLien)];[body appendData:HMEncode(@"Content-Type: image/png")];[body appendData:HMEncode(HMNewLien)];[body appendData:HMEncode(HMNewLien)];UIImage *image = [UIImage imageNamed:@"minion_03"];NSData *imageData = UIImagePNGRepresentation(image);[body appendData:imageData];[body appendData:HMEncode(HMNewLien)];// 3.2.用户名参数[body appendData:HMEncode(@"--")];[body appendData:HMEncode(HMFileBoundary)];[body appendData:HMEncode(HMNewLien)];[body appendData:HMEncode(@"Content-Disposition: form-data; name=\"username\"")];[body appendData:HMEncode(HMNewLien)];[body appendData:HMEncode(HMNewLien)];[body appendData:HMEncode(@"张三")];[body appendData:HMEncode(HMNewLien)];// 3.3.结束标记[body appendData:HMEncode(@"--")];[body appendData:HMEncode(HMFileBoundary)];[body appendData:HMEncode(@"--")];[body appendData:HMEncode(HMNewLien)];request.HTTPBody = body;// 4.设置请求头(告诉服务器这次传给你的是文件数据,告诉服务器现在发送的是一个文件上传请求)NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", HMFileBoundary];[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

View Code

文件上传基础代码封装(不用自己敲代码)

//
//  HMViewController.m

#import "HMViewController.h"
#define HMFileBoundary @"heima"
#define HMNewLien @"\r\n"
#define HMEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]@interface HMViewController ()@end@implementation HMViewController- (void)viewDidLoad
{[super viewDidLoad];NSString *name = @"jack";[self test:&name];NSLog(@"%@", name);//    int a = 20;
//    [self test:&a];
}//- (void)test:(int *)num
//{
//    *num = 10;
//}- (void)test:(NSString **)str
{*str = @"rose";
}- (NSString *)MIMEType:(NSURL *)url
{// 1.创建一个请求NSURLRequest *request = [NSURLRequest requestWithURL:url];// 2.发送请求(返回响应)NSURLResponse *response = nil;[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];// 3.获得MIMETypereturn response.MIMEType;
}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{[self upload];
//    NSURL *url = [[NSBundle mainBundle] URLForResource:@"autolayout" withExtension:@"txt"];//    NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/课堂共享/第一次考试/考试说明.docx"];
//    NSLog(@"%@", url);
//    NSLog(@"%@", [self MIMEType:url]);
}/*参数1参数2结束标记*//** 文件参数heimaContent-Disposition: form-data; name="参数名"; filename="文件名"Content-Type: 文件类型(MIMEType)文件具体数据* 非文件参数heimaContent-Disposition: form-data; name="参数名"参数值*/- (void)upload
{// 非文件参数NSDictionary *params = @{@"username" : @"李四",@"pwd" : @"123",@"age" : @30,@"height" : @"1.55"};NSURL *url = [[NSBundle mainBundle] URLForResource:@"autolayout" withExtension:@"txt"];NSData *data = [NSData dataWithContentsOfURL:url];NSString *MIMEType = [self MIMEType:url];[self upload:@"test.txt" mimeType:MIMEType fileData:data params:params];// 文件数据
//    UIImage *image = [UIImage imageNamed:@"minion_03"];
//    NSData *imageData = UIImagePNGRepresentation(image);
//
//    [self upload:@"777.png" mimeType:@"image/png" fileData:imageData params:params];
}- (void)upload:(NSString *)filename mimeType:(NSString *)mimeType fileData:(NSData *)fileData params:(NSDictionary *)params
{// 1.请求路径NSURL *url = [NSURL URLWithString:@"http://192.168.15.172:8080/MJServer/upload"];// 2.创建一个POST请求NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"POST";// 3.设置请求体NSMutableData *body = [NSMutableData data];// 3.1.文件参数[body appendData:HMEncode(@"--")];[body appendData:HMEncode(HMFileBoundary)];[body appendData:HMEncode(HMNewLien)];NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"", filename];[body appendData:HMEncode(disposition)];[body appendData:HMEncode(HMNewLien)];NSString *type = [NSString stringWithFormat:@"Content-Type: %@", mimeType];[body appendData:HMEncode(type)];[body appendData:HMEncode(HMNewLien)];[body appendData:HMEncode(HMNewLien)];[body appendData:fileData];[body appendData:HMEncode(HMNewLien)];// 3.2.非文件参数[params enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {[body appendData:HMEncode(@"--")];[body appendData:HMEncode(HMFileBoundary)];[body appendData:HMEncode(HMNewLien)];NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"", key];[body appendData:HMEncode(disposition)];[body appendData:HMEncode(HMNewLien)];[body appendData:HMEncode(HMNewLien)];[body appendData:HMEncode([obj description])];[body appendData:HMEncode(HMNewLien)];}];// 3.3.结束标记[body appendData:HMEncode(@"--")];[body appendData:HMEncode(HMFileBoundary)];[body appendData:HMEncode(@"--")];[body appendData:HMEncode(HMNewLien)];request.HTTPBody = body;// 4.设置请求头(告诉服务器这次传给你的是文件数据,告诉服务器现在发送的是一个文件上传请求)NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", HMFileBoundary];[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

View Code

转载于:https://www.cnblogs.com/zff193/p/5297114.html

0923-网络 文件上传相关推荐

  1. 关于jQuery在Asp.Net Mvc 框架下Ajax文件上传的实现

    1. 实现传统的网络文件上传解决方案 首先,我先实现一个传统的网络文件上传方案,建立一个web页面,我还需要一个<form>和两个<input>元素就能解决问题,如在Index ...

  2. 网络编程 UDP通信的过程 TCP通信过程 多线程文件上传

    网络概述 协议 在网络之间传出数据时需要按照指定的标准来传输,标准中规定了数据的格式.大小.传输的方式.传输速率.形成统一规范->按照规范开发的代码->协议(应用层.传输层.网络层.链路层 ...

  3. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  4. wxml 点击图片下载_微信小程序通过ipfs-api 实现图片文件在私有ipfs网络的上传与下载显示...

    1.快速搭建IPFS私有网络(docker) 拉取镜像 docker pull docker.io/ipfs/go-ipfs:latest 编写yaml文件 创建两个文件夹并分别命名为:ipfs_no ...

  5. php上传报文,PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性...

    关系数组 array("key"=>"value",...) ; get没有数据大小的限制 post上传大小没有限制 不指定上传方式,默认是get 文件上 ...

  6. [网络安全提高篇] 一〇四.网络渗透靶场Oracle+phpStudy本地搭建万字详解(SQL注入、XSS攻击、文件上传漏洞)

    当您阅读到该篇文章时,作者已经将"网络安全自学篇"设置成了收费专栏,首先说声抱歉.感谢这一年来大家的阅读和陪伴,这100篇安全文章记录了自己从菜鸡到菜鸟的成长史,该部分知识也花了很 ...

  7. PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性...

    关系数组 array("key"=>"value",...) ; get没有数据大小的限制 post上传大小没有限制 不指定上传方式,默认是get 文件上 ...

  8. 【java笔记】网络编程:文件上传案例

    原理:文件的复制 客户端读取本地的文件,把文件上传到服务器,服务器把上传的文件保存到服务器的硬盘上 步骤: 1.客户端使用本地的字节输入流,读取要上传的文件 2.客户端使用网路字节输出流,把读取的文件 ...

  9. QQ群、讨论组上传文件,由于网络原因上传失败?

    QQ群.讨论组上传文件,由于网络原因上传失败? 听语音 | 浏览:194 | 更新:2016-10-29 14:17 | 标签:软件 电脑 1 2 3 4 分步阅读 QQ群.讨论组上传文件,总是由于网 ...

  10. AFN(向网络发送请求---文件上传)

    基本使用 GET请求 1.创建会话管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];NSDictionary *pa ...

最新文章

  1. 【C++】多线程互斥锁、条件变量
  2. 太赞了!副业月入3W的技术大佬的公众号,学起来!
  3. .net和java互操作
  4. Python 代码尝试
  5. Struts和Sitemesh整合,实现多个装饰器
  6. golang 正则 校验 字符串
  7. 隐藏oracle数据库,如何隐藏Oracle密码
  8. python 计算s= 12+ 22+ 32 +... + (10*n+2)
  9. c语言全面,最新版c语言经典习题100例(最全面).doc
  10. 项目小记: IFRAME引起内存泄露的解决方法
  11. 【一分钟论文】Deep Biaffine Attention for Neural Dependency Parsing
  12. 骑士资本高频交易系统事故案例分析
  13. 导出的excel添加水印
  14. 开发悬浮球SDK之自定义view 下篇 — 裁剪圆形(以及其他形状)背景图片并设置文字
  15. Docker 使用手册
  16. 打开浏览器默认打开hao123网站的主页怎么取消设置?
  17. shiro框架---shiro配置介绍(一)
  18. python3爬虫基本操作——抓取股票信息
  19. “数字炸弹“——练习Python基础知识的小游戏【文末源码地址】
  20. model.evaluate 和 model.predict

热门文章

  1. python导入模块介绍_详解Python模块导入方法
  2. concurrentbag 删除指定元素_Python 列表,for循环,元组的使用(修改、添加、删除、排序、切片)
  3. alternatives java_linux使用update-alternatives切换java版本
  4. java实现客服转接_Java微信公众平台开发(9) 关键字回复以及客服接口实现
  5. 常见的通配符_技术干货 | 常见的mysql注入语句
  6. android 仿ios三级联动,仿iOS的PickerView控件,有时间选择和选项选择并支持一二三级联动效果...
  7. java哈希映射干什么的_java – 为什么在哈希映射中有空值或空键是有用的?
  8. php如何对mysql加锁_PHP+MySQL高并发加锁事务处理问题解决方法
  9. 新疆大学c语言期末考试题库,2016年新疆师范大学教育科学学院C语言程序设计考研复试题库...
  10. php7 打开错误提示,PHP7如何开启具体错误显示