IOS-网络(文件上传)
2016-02-08 22:45
666 查看
// // ViewController.m // IOS_0206_文件上传 // // Created by ma c on 16/2/6. // Copyright © 2016年 博文科技. All rights reserved. // #import "ViewController.h" #define BWFileBoundary @"----------BowenKeJi" #define BWNewLine @"\r\n" #define BWEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] @interface ViewController () @end @implementation ViewController /* 一、文件上传的概括 参数1 参数2 结束标记3 -------------------------------------------------------------- 二、文件上传的格式 1.文件参数 BowenKeJi Content-Disposition: form-data; name="参数名"; filename="文件名" Content-Type: 文件类型/MIMEType 文件具体数据 2.非文件参数 BowenKeJi Content-Disposition: form-data; name="参数名" 参数值 3.结束标记 BowenKeJi-- ------------------------------------------------------------------- 三、文件的MIMEType 1.百度搜索 2.apache-tomcat-版本号/conf/web.xml 3.加载文件时通过Reponse获得 ------------------------------------------------------------------- */ - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor cyanColor]; NSString *name = @"jack"; [self test:&name]; NSLog(@"%@",name); } ///在方法中更改字符串的值 - (void)test:(NSString **)str { *str = @"bowen"; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //[self upload]; //文件参数 NSDictionary *params = @{ @"username" : @"bowen" }; //文件数据 // UIImage *image = [UIImage imageNamed:@"abc"]; // NSData *imgData = UIImageJPEGRepresentation(image, 1); // [self upload:@"text.png" AndMIMEType:@"image/png" AndfileData:imgData AndParams:params]; NSURL *url = [[NSBundle mainBundle] URLForResource:@"abc" withExtension:@"jpg"]; NSData *data = [NSData dataWithContentsOfURL:url]; NSString *MIMEType = [self MIMEType:url]; [self upload:@"cba.jpg" AndMIMEType:MIMEType AndfileData:data AndParams:params]; // NSURL *url1 = [[NSBundle mainBundle] URLForResource:@"abc" withExtension:@"jpg"]; // //NSURL *url1 = [NSURL fileURLWithPath:@"/Users/apple/Desktop/hehe.text"]; // NSString *mimeType = [self MIMEType:url1]; // NSLog(@"%@",mimeType); } ///文件的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 { // 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)]; [body appendData:BWEncode(@"Content-Disposition: form-data; name=\"file\"; filename=\"ts.jpg\"")]; [body appendData:BWEncode(BWNewLine)]; [body appendData:BWEncode(@"Content-Type: image/jpg")]; [body appendData:BWEncode(BWNewLine)]; //具体内容 [body appendData:BWEncode(BWNewLine)]; UIImage *image = [UIImage imageNamed:@"abc"]; NSData *imgData = UIImageJPEGRepresentation(image, 1); [body appendData:imgData]; [body appendData:BWEncode(BWNewLine)]; // 4.2非文件参数(用户名参数) [body appendData:BWEncode(@"--")]; [body appendData:BWEncode(BWFileBoundary)]; [body appendData:BWEncode(BWNewLine)]; [body appendData:BWEncode(@"Content-Disposition: form-data; name=\"username\"")]; [body appendData:BWEncode(BWNewLine)]; [body appendData:BWEncode(BWNewLine)]; [body appendData:BWEncode(@"bowen")]; [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); }]; } ///文件上传封装 - (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
相关文章推荐
- http://www.google.com/ncr 谷歌无限制搜索方法,用过都说好
- AngularJS中的http拦截
- restlet 2.3.5 org.restlet包导入eclipse出现的com.sun.net.httpserver类包找不到问题
- lighttpd-1.4.39 : watcher and worker
- [置顶] 利用django和python构建网络运维平
- JAVA网络编程TCP案例
- 2016年网络SEO外链指南
- C++自制Redis数据库(四) 设计开始 敲定各模块架构--网络模块
- https原理及tomcat配置https方法
- 初识AJAX与XMLHttpRequest介绍
- 无线网络渗透概述
- Win10系统查看网络连接详细信息的方法
- unix网络编程 str_cli epoll 非阻塞版本
- Tomcat【2】(Tomcat处理Http请求)
- Linux本地网络脚本配置(内网与外网)
- Linux本地网络脚本配置(内网与外网)
- Linux本地网络脚本配置(内网与外网)
- 网络嗅探技术
- 使用基于Http的消息代替WebService的数据交互
- DNS,ARP,秘钥和数字签名.