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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac SecureCRT设置

参考&#xff1a; http://www.2cto.com/os/201407/320292.html SecureCRT 设置 1&#xff09;每次登陆都要输入密码&#xff1a; Global Option -> General 取消&#xff1a;Use Keychain前面的勾 2&#xff09;Logon Actions Logon Actions很强大&#xff0c;和python里…

【微服务专题之】.Net6下集成消息队列上-RabbitMQ

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常实战开发技巧&#xff0c;如需源码 请公众号后台留言 源码;[如果觉得本公众号对您有帮助&#xff0c;欢迎关注].Net中RabbitMQ的使用超清观看视频哦~官网链接RabbitMQ代码演示-详细见代码注释&#xff0c;操作看上文视…

[转]总结:Apache/Tomcat/JBOSS/Jetty/Nginx区别 .

总结&#xff1a;Apache/Tomcat/JBOSS/Nginx区别 . 1、Apache是Web服务器&#xff0c;Tomcat是应用&#xff08;Java&#xff09;服务器。Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用。Apache支持静态页&#xff0c;Tomcat支持动态的。 2、Jetty:Tomcat内核作…

华为云GaussDB,11.11让企业无后顾之忧

每年11.11大促对于数据库而言都是一场生死考验&#xff0c;如何保障系统的稳定可靠&#xff0c;如何平稳度过业务流量洪峰期&#xff0c;如何高效扩容&#xff0c;成为每个参与活动客户的一大痛点。本文将通过5个常见的大促问题及分析&#xff0c;看看华为云GaussDB是如何解决这…

【CC精品教程】ContextCapture(CC)集群处理环境部署图文教程

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) 鉴于CC其三维构建运算的本质,海量数据的解析运算会使用大量的计算机资源,而再好的单台计算机也无法胜过多台计算机的并行运算能力,故而借助局域网内多台计算机设备进行三维构建运算,可以节省大…

Linux-PAM PAM-MySQL的总结

1、理论知识 1.1、PAM模块 1.1.1、PAM的介绍 Pluggable Authentication Modules简称PAM&#xff0c;是一个微缩的可插入认证模块&#xff08;PAM is an acronym for Pluggable Authentication Modules&#xff09; 1.1.2、PAM的结构 1)模块层(PAM服务模块) - PAM结构最底层 作用…

ubuntu下配置jdk(离线压缩包方式)

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c;下载jdk压缩包 2、解压后得到名字为jdk1.7.0_21的文件夹&#xff0c;将其复制到 /usr/lib/jvm下&#xff08;需要新建jvm文件夹&#xff09;。3、配置jdk环境变量&#xff1a;在启动终端并输入 gedit /e…

【PhotoScan精品教程】PhotoScan简介、安装教程(附PhotoScan1.4.5安装包下载)

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) PhotoScan在无人机航空摄影测量空三运算中,具有运行速度快、精度高等特点。PhotoScan空三运算的结果可以导入CC等进行模型构建。【PhotoScan精品教程】讲解利用PhotoScan软件进行航测内业空三运算…

利用JS脚本快速删除百度网盘同一目录下的不需要文件(可以参考这个方法删除重复文件)

比如百度网盘某目录下存有如下文件&#xff1a; 要求&#xff1a;将如上图文件目录下的文件&#xff0c;每个月只保留最后&#xff08;新&#xff09;一个&#xff08;根据文件名中包含的日期&#xff09;&#xff0c;其它删除。 比如7月份有3个文件&#xff0c;只保留2019-07-…

vuepress build提示YAMLException: end of the stream or a document separator is expected at line 7, colu

1、问题 vuePress执行build操作的时候 vuepress build ~/my_blogs/docs/ 错误提示如下 YAMLException: end of the stream or a document separator is expected at line 7, column 9:features:^at generateError (/usr/lib/node_modules/vuepress/node_modules/js-yaml/lib…

依赖注入之针对不同类型变量的几种注入方式

控制反转(Inversion of Control)和依赖注入(Dependency Injection)讲的都是一个概念,只不过是站在了不同的角度,所谓的依赖注入: 依赖注入&#xff08;DI&#xff09;是指在运行期&#xff0c;由外部容器动态地将依赖对象注入到组件中。当spring容器启动后&#xff0c;spring容…

【本周六活动】.NET Day in China

点击蓝字关注我们编辑&#xff1a;Alan Wang排版&#xff1a;Rani Sun活动介绍去年11月&#xff0c;.NET 6 的发布&#xff0c;为我们带来了 .NET 多平台应用 UI&#xff08;.NET MAUI&#xff09;。就在前不久&#xff0c;.NET MAUI 已正式发布。未来&#xff0c;作为 .NET 7 …

【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) 【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三 【PhotoScan精品教程】任务二:刺像控点,平差,质量报告精度检查,像控点POS权重调配 【PhotoScan…

[转]Angular 单元测试讲解

Angular_单元测试 测试分类 按开发阶段划分按是否运行划分按是否查看源代码划分其他ATDD,TDD,BDD,DDD ATDDTDDBDDDDDAngular单元测试 Karma的介绍jasmine介绍单元测试的好处使用jasmine和karma创建一个Angular项目Karma配置Test.ts文件测试体验测试Form测试服务service常用断言…

windows执行python文件提示SyntaxError: Non-ASCII character ‘\xe9‘ in file 1.py on line 7, but no encoding d

1、问题 windows环境下执行python文件&#xff0c;提示错误如下 SyntaxError: Non-ASCII character \xe9 in file 1.py on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 2、解决办法 py文件头部加上 #codingutf-8

按键精灵如何调用Excel及按键精灵写入Excel数据的方法教程---入门自动操作表格...

首先来建立一个新的Excel文档&#xff0c;在桌面上点击右键&#xff0c;选择【新建】-【Excel工作表】&#xff0c;命名为【新手学员】。 现在这个新Excel文档是空白的&#xff0c;我们接下来会通过按键精灵的脚本来打开并写入一些数据。打开按键精灵软件&#xff0c;点击【新建…

第九十五节,移动流体布局和响应式布局总结

移动流体布局和响应式布局总结 宽度与高度 区块宽度一般用max-width 最大宽度和百分比&#xff0c;来定义宽度&#xff0c;因为要实现自动缩放 高度如果要自适应&#xff0c;就不需要定义高度&#xff0c;或者定义最小高度 注意&#xff1a;横向的尽量用百分比&#xff0c;如边…

Maui的学习之路 -- 开篇

Maui的学习之路 -- 开篇想了很久我决定发一个Maui介绍做为开篇&#xff0c;虽然这是老生常谈的话题&#xff0c;但是不能没有这样的探讨&#xff08;请容我水一篇&#xff09;。什么是.NET Maui.NET Maui是微软的一款基于.Net多平台应用 UI (.NET MAUI)的跨平台框架&#xff0c…

【PhotoScan精品教程】任务二:刺像控点,平差,质量报告精度检查,像控点POS权重调配

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) 【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三 【PhotoScan精品教程】任务二:刺像控点,平差,质量报告精度检查,像控点POS权重调配 【PhotoScan…

互联网架构的演变,看了好多这个讲的确实清楚!

从过去的 OA、CRM、ERP 等单机即可满足要求的系统到现代互联网时代各大公司的分布式、微服务平台&#xff0c;互联网架构正在经历着巨大的变革&#xff0c;技术也在不断的更新迭代。 图片来自 Pexels这也意味着众多软件开发者们的压力和挑战正在不断的加大&#xff0c;这种新技…