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-网络(文件上传)相关推荐

  1. 软件测试之ios自动化——文件上传

    一个完整的自动化工具,自动提单是非常重要的一环,bug单可以作为衡量自动化工具的产出指标,可以直接说明该自动化工具的价值.而提单离不开文件上传,接下来详细介绍一下ios的文件上传. ios文件上传可以 ...

  2. iOS开发-文件上传原理

    文件上传 编写文件上传类UploadFile.h // // UploadFile.h // 02.Post上传 // // Created by wyh on 15-1-29. // Copyrig ...

  3. php ios视频文件上传,iOS实现视频和图片的上传思路

    关于iOS如何实现视频和图片的上传, 我们先理清下思路,然后小编根据思路一步一步给大家详解实现过程. 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. ...

  4. ios html5 文件上传,【Web前端问题】上传文件使用axios发送FormData数据,参数为空...

    上传文件使用axios发送数据,参数为空 const uploadInput = document.getElementById('uploadBtn'); let param = new windo ...

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

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

  6. iOS开发网络篇 一一 文件上传

    下面使用两种方式来实现iOS网络中的文件上传. 注意: 文件上传要发送POST请求 使用 NSURLConnection 来实现 文件上传 使用 NSURLSession 来实现 文件上传 这两种方式 ...

  7. ios上传文件云服务器上,ios文件上传服务器

    ios文件上传服务器 内容精选 换一换 在当前的迁移流程中,可能会存在迁移后ECS控制台镜像名称与实际操作系统不一致的现象.在当前机制下,该现象属于正常现象.该处显示的是下发ECS时使用的镜像名称,而 ...

  8. IOS And WCF 上传文件

    IOS And WCF Story 研究IOS上传到WCF图片的小功能,WCF实现服务端的文件上传的例子很多,单独实现IOS发送图片的例子也很多,但是两个结合起来的就很少了. 可以通过base64来上 ...

  9. ios如何上传文件到服务器,ios通过ftp上传文件到服务器

    ios通过ftp上传文件到服务器 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...

  10. ftp ios 上传文件到服务器上,ios通过ftp上传文件到服务器

    ios通过ftp上传文件到服务器 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...

最新文章

  1. 阿里、腾讯基本薪资曝光,资深算法工程师24万美元,高级研究员26万美元
  2. 英伟达新卡皇3090Ti:功耗飙至450W换来性能涨11%
  3. Selenium2学习(八)-- 操作元素(键盘和鼠标事件)
  4. 修改注册表后不重启计算机边生效(转)
  5. JPA注解(这里包含sequence类型的)
  6. 【Python数据分析】魔术命令(Magic Command)
  7. 全国计算机等级考试题库二级C操作题100套(第93套)
  8. 建筑工程项目管理信息化PM
  9. 40_并发编程-事件
  10. [原创]Clang with Microsoft CodeGen小测试
  11. 建造游乐园(play)
  12. vc c mysql_VC++ 利用 MySQL connector c 访问MySQL 数据库
  13. 双二极管(BAT54S)在电路中起什么作用? 钳位和保护
  14. C# WPF十个美观的界面设计展示
  15. 基金账户与基金交易账户
  16. 制作FlappyBird时出现的一些问题
  17. 第二章作业题1-顺序表-计算机17级 7-1 jmu-ds-集合的并交差运算 (15 分)
  18. Andriod studio manifast中添加权限却还无效日历api设置定时闹钟却不生效
  19. PDFCrackers Plus版
  20. 关于身份认证和鉴权过程

热门文章

  1. 思科网络基础之访问控制列表
  2. 从0开始学习 GitHub 系列之「03.Git 速成」
  3. HDU 2818 Building Block
  4. 4G DTU使用教程
  5. Vmware虚拟机三种网络模式配图详解
  6. mysql redis hbase_MySQL之基本介绍
  7. oracle11g导出dmp文件 少表,Oracle11g导出dmp并导入Oracle10g的操作记录
  8. java -XX:+PrintFlagsInitial该命令可以查看所有JVM参数启动的初始值
  9. Object o = new Object()在内存中占几个字节
  10. 时下流行的9种恶意软件,你都了解吗?