IOS-网络(文件上传)
1 // 2 // ViewController.m 3 // IOS_0206_文件上传 4 // 5 // Created by ma c on 16/2/6. 6 // Copyright © 2016年 博文科技. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 #define BWFileBoundary @"----------BowenKeJi" 11 #define BWNewLine @"\r\n" 12 #define BWEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] 13 14 @interface ViewController () 15 16 @end 17 18 @implementation ViewController 19 20 /* 21 一、文件上传的概括 22 参数1 23 参数2 24 结束标记3 25 26 -------------------------------------------------------------- 27 二、文件上传的格式 28 29 1.文件参数 30 BowenKeJi 31 32 Content-Disposition: form-data; name="参数名"; filename="文件名" 33 34 Content-Type: 文件类型/MIMEType 35 36 37 文件具体数据 38 39 2.非文件参数 40 BowenKeJi 41 42 Content-Disposition: form-data; name="参数名" 43 44 45 参数值 46 47 3.结束标记 48 BowenKeJi-- 49 50 ------------------------------------------------------------------- 51 三、文件的MIMEType 52 1.百度搜索 53 2.apache-tomcat-版本号/conf/web.xml 54 3.加载文件时通过Reponse获得 55 ------------------------------------------------------------------- 56 */ 57 58 - (void)viewDidLoad { 59 [super viewDidLoad]; 60 61 self.view.backgroundColor = [UIColor cyanColor]; 62 63 NSString *name = @"jack"; 64 [self test:&name]; 65 NSLog(@"%@",name); 66 67 } 68 69 ///在方法中更改字符串的值 70 - (void)test:(NSString **)str 71 { 72 *str = @"bowen"; 73 } 74 75 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 76 { 77 //[self upload]; 78 79 //文件参数 80 NSDictionary *params = @{ 81 @"username" : @"bowen" 82 }; 83 //文件数据 84 // UIImage *image = [UIImage imageNamed:@"abc"]; 85 // NSData *imgData = UIImageJPEGRepresentation(image, 1); 86 // [self upload:@"text.png" AndMIMEType:@"image/png" AndfileData:imgData AndParams:params]; 87 88 NSURL *url = [[NSBundle mainBundle] URLForResource:@"abc" withExtension:@"jpg"]; 89 NSData *data = [NSData dataWithContentsOfURL:url]; 90 NSString *MIMEType = [self MIMEType:url]; 91 [self upload:@"cba.jpg" AndMIMEType:MIMEType AndfileData:data AndParams:params]; 92 93 94 // NSURL *url1 = [[NSBundle mainBundle] URLForResource:@"abc" withExtension:@"jpg"]; 95 // //NSURL *url1 = [NSURL fileURLWithPath:@"/Users/apple/Desktop/hehe.text"]; 96 // NSString *mimeType = [self MIMEType:url1]; 97 // NSLog(@"%@",mimeType); 98 99 } 100 101 ///文件的MIMEType 102 - (NSString *)MIMEType:(NSURL *)url 103 { 104 //1.创建一个请求 105 NSURLRequest *request = [NSURLRequest requestWithURL:url]; 106 107 NSURLResponse *response = nil; 108 //2.发送请求(返回响应) 109 [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; 110 //3.获得MIMEType 111 return response.MIMEType; 112 } 113 114 ///文件上传未封装 115 - (void)upload 116 { 117 // 1.请求路径 118 NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/upload"]; 119 // 2.创建一个POST请求 120 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 121 request.HTTPMethod = @"POST"; 122 // 2.设置请求头(告诉服务器这次上传的是文件数据) 123 NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",BWFileBoundary]; 124 [request setValue:contentType forHTTPHeaderField:@"Content-Type"]; 125 // 3.设置请求体 126 NSMutableData *body = [NSMutableData data]; 127 128 // 4.1文件参数 129 [body appendData:BWEncode(@"--")]; 130 [body appendData:BWEncode(BWFileBoundary)]; 131 [body appendData:BWEncode(BWNewLine)]; 132 133 [body appendData:BWEncode(@"Content-Disposition: form-data; name=\"file\"; filename=\"ts.jpg\"")]; 134 [body appendData:BWEncode(BWNewLine)]; 135 136 [body appendData:BWEncode(@"Content-Type: image/jpg")]; 137 [body appendData:BWEncode(BWNewLine)]; 138 139 //具体内容 140 [body appendData:BWEncode(BWNewLine)]; 141 UIImage *image = [UIImage imageNamed:@"abc"]; 142 NSData *imgData = UIImageJPEGRepresentation(image, 1); 143 [body appendData:imgData]; 144 [body appendData:BWEncode(BWNewLine)]; 145 146 // 4.2非文件参数(用户名参数) 147 [body appendData:BWEncode(@"--")]; 148 [body appendData:BWEncode(BWFileBoundary)]; 149 [body appendData:BWEncode(BWNewLine)]; 150 151 [body appendData:BWEncode(@"Content-Disposition: form-data; name=\"username\"")]; 152 [body appendData:BWEncode(BWNewLine)]; 153 154 [body appendData:BWEncode(BWNewLine)]; 155 [body appendData:BWEncode(@"bowen")]; 156 [body appendData:BWEncode(BWNewLine)]; 157 158 // 4.3结束标记 159 [body appendData:BWEncode(@"--")]; 160 [body appendData:BWEncode(BWFileBoundary)]; 161 [body appendData:BWEncode(@"--")]; 162 [body appendData:BWEncode(BWNewLine)]; 163 164 request.HTTPBody = body; 165 166 // 5.发送请求 167 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { 168 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; 169 NSLog(@"%@",dict); 170 }]; 171 } 172 173 ///文件上传封装 174 - (void)upload:(NSString *)filename AndMIMEType:(NSString *)mimeType AndfileData:(NSData *)fileData 175 AndParams:(NSDictionary *)dict 176 { 177 // 1.请求路径 178 NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/upload"]; 179 // 2.创建一个POST请求 180 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 181 request.HTTPMethod = @"POST"; 182 // 2.设置请求头(告诉服务器这次上传的是文件数据) 183 NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",BWFileBoundary]; 184 [request setValue:contentType forHTTPHeaderField:@"Content-Type"]; 185 // 3.设置请求体 186 NSMutableData *body = [NSMutableData data]; 187 188 // 4.1文件参数 189 [body appendData:BWEncode(@"--")]; 190 [body appendData:BWEncode(BWFileBoundary)]; 191 [body appendData:BWEncode(BWNewLine)]; 192 NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"",filename]; 193 [body appendData:BWEncode(disposition)]; 194 [body appendData:BWEncode(BWNewLine)]; 195 196 NSString *type = [NSString stringWithFormat:@"Content-Type: %@",mimeType]; 197 [body appendData:BWEncode(type)]; 198 [body appendData:BWEncode(BWNewLine)]; 199 200 //具体内容 201 [body appendData:BWEncode(BWNewLine)]; 202 [body appendData:fileData]; 203 [body appendData:BWEncode(BWNewLine)]; 204 205 // 4.2非文件参数(用户名参数) 206 207 [dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { 208 [body appendData:BWEncode(@"--")]; 209 [body appendData:BWEncode(BWFileBoundary)]; 210 [body appendData:BWEncode(BWNewLine)]; 211 212 NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"",key]; 213 214 [body appendData:BWEncode(disposition)]; 215 [body appendData:BWEncode(BWNewLine)]; 216 217 [body appendData:BWEncode(BWNewLine)]; 218 [body appendData:BWEncode([obj description])]; 219 [body appendData:BWEncode(BWNewLine)]; 220 221 }]; 222 // 4.3结束标记 223 [body appendData:BWEncode(@"--")]; 224 [body appendData:BWEncode(BWFileBoundary)]; 225 [body appendData:BWEncode(@"--")]; 226 [body appendData:BWEncode(BWNewLine)]; 227 228 request.HTTPBody = body; 229 230 // 5.发送请求 231 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { 232 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; 233 NSLog(@"%@",dict); 234 }]; 235 } 236 @end
IOS-网络(文件上传)相关推荐
- 软件测试之ios自动化——文件上传
一个完整的自动化工具,自动提单是非常重要的一环,bug单可以作为衡量自动化工具的产出指标,可以直接说明该自动化工具的价值.而提单离不开文件上传,接下来详细介绍一下ios的文件上传. ios文件上传可以 ...
- iOS开发-文件上传原理
文件上传 编写文件上传类UploadFile.h // // UploadFile.h // 02.Post上传 // // Created by wyh on 15-1-29. // Copyrig ...
- php ios视频文件上传,iOS实现视频和图片的上传思路
关于iOS如何实现视频和图片的上传, 我们先理清下思路,然后小编根据思路一步一步给大家详解实现过程. 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. ...
- ios html5 文件上传,【Web前端问题】上传文件使用axios发送FormData数据,参数为空...
上传文件使用axios发送数据,参数为空 const uploadInput = document.getElementById('uploadBtn'); let param = new windo ...
- 关于jQuery在Asp.Net Mvc 框架下Ajax文件上传的实现
1. 实现传统的网络文件上传解决方案 首先,我先实现一个传统的网络文件上传方案,建立一个web页面,我还需要一个<form>和两个<input>元素就能解决问题,如在Index ...
- iOS开发网络篇 一一 文件上传
下面使用两种方式来实现iOS网络中的文件上传. 注意: 文件上传要发送POST请求 使用 NSURLConnection 来实现 文件上传 使用 NSURLSession 来实现 文件上传 这两种方式 ...
- ios上传文件云服务器上,ios文件上传服务器
ios文件上传服务器 内容精选 换一换 在当前的迁移流程中,可能会存在迁移后ECS控制台镜像名称与实际操作系统不一致的现象.在当前机制下,该现象属于正常现象.该处显示的是下发ECS时使用的镜像名称,而 ...
- IOS And WCF 上传文件
IOS And WCF Story 研究IOS上传到WCF图片的小功能,WCF实现服务端的文件上传的例子很多,单独实现IOS发送图片的例子也很多,但是两个结合起来的就很少了. 可以通过base64来上 ...
- ios如何上传文件到服务器,ios通过ftp上传文件到服务器
ios通过ftp上传文件到服务器 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...
- ftp ios 上传文件到服务器上,ios通过ftp上传文件到服务器
ios通过ftp上传文件到服务器 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...
最新文章
- 阿里、腾讯基本薪资曝光,资深算法工程师24万美元,高级研究员26万美元
- 英伟达新卡皇3090Ti:功耗飙至450W换来性能涨11%
- Selenium2学习(八)-- 操作元素(键盘和鼠标事件)
- 修改注册表后不重启计算机边生效(转)
- JPA注解(这里包含sequence类型的)
- 【Python数据分析】魔术命令(Magic Command)
- 全国计算机等级考试题库二级C操作题100套(第93套)
- 建筑工程项目管理信息化PM
- 40_并发编程-事件
- [原创]Clang with Microsoft CodeGen小测试
- 建造游乐园(play)
- vc c mysql_VC++ 利用 MySQL connector c 访问MySQL 数据库
- 双二极管(BAT54S)在电路中起什么作用? 钳位和保护
- C# WPF十个美观的界面设计展示
- 基金账户与基金交易账户
- 制作FlappyBird时出现的一些问题
- 第二章作业题1-顺序表-计算机17级 7-1 jmu-ds-集合的并交差运算 (15 分)
- Andriod studio manifast中添加权限却还无效日历api设置定时闹钟却不生效
- PDFCrackers Plus版
- 关于身份认证和鉴权过程
热门文章
- 思科网络基础之访问控制列表
- 从0开始学习 GitHub 系列之「03.Git 速成」
- HDU 2818 Building Block
- 4G DTU使用教程
- Vmware虚拟机三种网络模式配图详解
- mysql redis hbase_MySQL之基本介绍
- oracle11g导出dmp文件 少表,Oracle11g导出dmp并导入Oracle10g的操作记录
- java -XX:+PrintFlagsInitial该命令可以查看所有JVM参数启动的初始值
- Object o = new Object()在内存中占几个字节
- 时下流行的9种恶意软件,你都了解吗?