iOS开发网络篇—文件的上传

说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中。本文介绍如何不借助第三方框架实现iOS开发中得文件上传。

  由于过程较为复杂,因此本文只贴出部分关键代码。

主控制器的关键代码:

YYViewController.m

 1 #import "YYViewController.h"
2
3 #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]
4
5 @interface YYViewController ()
6
7 @end
8
9 @implementation YYViewController
10
11 - (void)viewDidLoad
12 {
13 [super viewDidLoad];
14 // Do any additional setup after loading the view, typically from a nib.
15 }
16
17 - (void)upload:(NSString *)name filename:(NSString *)filename mimeType:(NSString *)mimeType data:(NSData *)data parmas:(NSDictionary *)params
18 {
19 // 文件上传
20 NSURL *url = [NSURL URLWithString:@"http://192.168.1.200:8080/YYServer/upload"];
21 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
22 request.HTTPMethod = @"POST";
23
24 // 设置请求体
25 NSMutableData *body = [NSMutableData data];
26
27 /***************文件参数***************/
28 // 参数开始的标志
29 [body appendData:YYEncode(@"--YY\r\n")];
30 // name : 指定参数名(必须跟服务器端保持一致)
31 // filename : 文件名
32 NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", name, filename];
33 [body appendData:YYEncode(disposition)];
34 NSString *type = [NSString stringWithFormat:@"Content-Type: %@\r\n", mimeType];
35 [body appendData:YYEncode(type)];
36
37 [body appendData:YYEncode(@"\r\n")];
38 [body appendData:data];
39 [body appendData:YYEncode(@"\r\n")];
40
41 /***************普通参数***************/
42 [params enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
43 // 参数开始的标志
44 [body appendData:YYEncode(@"--YY\r\n")];
45 NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n", key];
46 [body appendData:YYEncode(disposition)];
47
48 [body appendData:YYEncode(@"\r\n")];
49 [body appendData:YYEncode(obj)];
50 [body appendData:YYEncode(@"\r\n")];
51 }];
52
53 /***************参数结束***************/
54 // YY--\r\n
55 [body appendData:YYEncode(@"--YY--\r\n")];
56 request.HTTPBody = body;
57
58 // 设置请求头
59 // 请求体的长度
60 [request setValue:[NSString stringWithFormat:@"%zd", body.length] forHTTPHeaderField:@"Content-Length"];
61 // 声明这个POST请求是个文件上传
62 [request setValue:@"multipart/form-data; boundary=YY" forHTTPHeaderField:@"Content-Type"];
63
64 // 发送请求
65 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
66 if (data) {
67 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
68 NSLog(@"%@", dict);
69 } else {
70 NSLog(@"上传失败");
71 }
72 }];
73 }
74
75 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
76 {
77 // Socket 实现断点上传
78
79 //apache-tomcat-6.0.41/conf/web.xml 查找 文件的 mimeType
80 // UIImage *image = [UIImage imageNamed:@"test"];
81 // NSData *filedata = UIImagePNGRepresentation(image);
82 // [self upload:@"file" filename:@"test.png" mimeType:@"image/png" data:filedata parmas:@{@"username" : @"123"}];
83
84 // 给本地文件发送一个请求
85 NSURL *fileurl = [[NSBundle mainBundle] URLForResource:@"itcast.txt" withExtension:nil];
86 NSURLRequest *request = [NSURLRequest requestWithURL:fileurl];
87 NSURLResponse *repsonse = nil;
88 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&repsonse error:nil];
89
90 // 得到mimeType
91 NSLog(@"%@", repsonse.MIMEType);
92 [self upload:@"file" filename:@"itcast.txt" mimeType:repsonse.MIMEType data:data parmas:@{
93 @"username" : @"999",
94 @"type" : @"XML"}];
95 }
96
97 @end

补充说明:

文件上传请求数据格式

部分文件的MIMEType

copy from 文顶顶

iOS 开发http post 文件的上传的更多相关文章

  1. iOS开发网络篇—文件的上传

    iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...

  2. iOS开发之--svn工具Cornerstone上传忽略.a文件的处理方法

    工程文件上传到svn中,.a文件会自动屏蔽(应该叫屏蔽,反正就是上传不上去) 用Cornerstone工具,解决这个问题 1.打开Cornerstone左上角,点Cornerstone->Pre ...

  3. Xcode5 + phoneGap2.9搭建ios开发环境-配置-测试-归档上传/phoneG...

    前言: 小弟是做JAVA/Android的第一次搞这个ios,公司有mobile项目是使用phoneGap开发的,需要开发ios版本.什么都不会只能一点一点琢磨了……大神越过…… 原文链接:http: ...

  4. iOS开发关于AppStore程序的上传流程

    主要内容: 1.创建唯一标示符App ID(前提是你的程序在真机上测试没有任何问题) 2.申请发布证书 3.申请发布描述文件 4.iTunes Connect创建App并填写信息 5.选择证书编译打包 ...

  5. iOS开发遇到的坑之七--上传app Stroe被拒绝:The app references non-public symbols in : _UICreateCGImageFromIOSurface

    这是上学期遇到的问题了,突然查阅邮箱的时候发现了,遂在这里记录下来,希望大家以后注意这个问题 我上传App Store的时候,apple给我发的邮件原文: Dear developer, We hav ...

  6. ios开发 将json格式数据上传服务器

    看了一些大小牛的资料其实就3步 1.使用post 请求 ,因为get是不能上传的 2.设置请求类型 , 讲你的json数据上传 3.向服务器发送数据按照下面示例代码,就差不多了 1 // 1.创建请求 ...

  7. ASP.NET MVC实现Excel文件的上传下载

    在应用系统开发当中,文件的上传和下载是非常普遍的需求.在基于.NET的C/S架构的项目开发当中,有多种方案可以实现文件的上传和下载(httpwebrequest.webclient等),而且多采用异步 ...

  8. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

  9. iOS开发-AFNetworking参数和多文件同时上传【多文件上传】

    1. 前言 在项目开发中,我们经常需要上传文件,例如:上传图片,上传各种文件,而有时也需要将参数和多个文件一起上传,不知道大家的项目中遇到了没有,我在最近的项目中,就需要这样的一个功能:同时上传参数. ...

随机推荐

  1. python生成器之斐波切纳数列

    面试的时候遇到过这样的一个题目: 斐波切纳数列1,2,3,5,8,13,21.........根据这样的规律,编程求出400万以内最大的斐波切纳数,并求出是第几个斐波切纳数. 方法一: 方法二:这个方 ...

  2. USACO Section 5.3 Milk Measuring (IDDFS+dp)

    迭代加深搜索,从小到大枚举桶数的上限maxd:对每个maxd,枚举每个组合,判断是否能够倒出q:直到得到answer.判断的部分就用dp(完全背包). ------------------------ ...

  3. python 中文异常问题记录

    头上加入以下内容试试: # -*- coding:utf-8import sysimport osreload(sys)sys.setdefaultencoding( "utf-8" ...

  4. google浏览器的安装

    很简单,命令行下安装命令:apt-get install google-chrome-stable(如安装不成功,输入apt-get -f install进行修复依赖,之后在菜单里就可以看到图标了) ...

  5. IOS 定位服务与地图的应用开发

    1.定位服务 现在的移动设备很多都提供定位服务,IOS设备提供3种不同定位途径: (1)WiFi定位,通过查询一个WiFi路由器的地理位置的信息,比较省电:IPhone,IPod touch和IPad ...

  6. Anatomy of a Program in Memory

    Memory management is the heart of operating systems; it is crucial for both programming and system a ...

  7. 超轻量级PHP SQL数据库框架

    <?php /** * ! Medoo 0.8.5 - Copyright 2013, Angel Lai - MIT license - http://medoo.in */ class me ...

  8. Oracle select into from 和 insert into select

    select into from SQLSERVER  创建表: select * into aaa from bbb Oracle 创建表: create table aaa as select * ...

  9. PE框架学习之道:PE框架——style的配置

    1.在style.xml中定义style     <style id="NumberStyle"> <setting> <param name=&qu ...

  10. CSS3媒体查询(Media Queries)

    媒体类型: all 所有设备 screen 电脑显示器 handheld 便携设备 tv 电视类型设备 print 打印用纸打印预览视图 关键字 and not(排除某种设备) only(限定某种设备 ...