iOS 开发http post 文件的上传
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 文件的上传的更多相关文章
- iOS开发网络篇—文件的上传
iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...
- iOS开发之--svn工具Cornerstone上传忽略.a文件的处理方法
工程文件上传到svn中,.a文件会自动屏蔽(应该叫屏蔽,反正就是上传不上去) 用Cornerstone工具,解决这个问题 1.打开Cornerstone左上角,点Cornerstone->Pre ...
- Xcode5 + phoneGap2.9搭建ios开发环境-配置-测试-归档上传/phoneG...
前言: 小弟是做JAVA/Android的第一次搞这个ios,公司有mobile项目是使用phoneGap开发的,需要开发ios版本.什么都不会只能一点一点琢磨了……大神越过…… 原文链接:http: ...
- iOS开发关于AppStore程序的上传流程
主要内容: 1.创建唯一标示符App ID(前提是你的程序在真机上测试没有任何问题) 2.申请发布证书 3.申请发布描述文件 4.iTunes Connect创建App并填写信息 5.选择证书编译打包 ...
- iOS开发遇到的坑之七--上传app Stroe被拒绝:The app references non-public symbols in : _UICreateCGImageFromIOSurface
这是上学期遇到的问题了,突然查阅邮箱的时候发现了,遂在这里记录下来,希望大家以后注意这个问题 我上传App Store的时候,apple给我发的邮件原文: Dear developer, We hav ...
- ios开发 将json格式数据上传服务器
看了一些大小牛的资料其实就3步 1.使用post 请求 ,因为get是不能上传的 2.设置请求类型 , 讲你的json数据上传 3.向服务器发送数据按照下面示例代码,就差不多了 1 // 1.创建请求 ...
- ASP.NET MVC实现Excel文件的上传下载
在应用系统开发当中,文件的上传和下载是非常普遍的需求.在基于.NET的C/S架构的项目开发当中,有多种方案可以实现文件的上传和下载(httpwebrequest.webclient等),而且多采用异步 ...
- iOS开发中文件的上传和下载功能的基本实现-备用
感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...
- iOS开发-AFNetworking参数和多文件同时上传【多文件上传】
1. 前言 在项目开发中,我们经常需要上传文件,例如:上传图片,上传各种文件,而有时也需要将参数和多个文件一起上传,不知道大家的项目中遇到了没有,我在最近的项目中,就需要这样的一个功能:同时上传参数. ...
随机推荐
- ArrayList-VS-LinkedList
ArrayList 是List接口的实现类:底层的数据结构是数组,而LinkedList底层数据结构是双向循环链表. 所以在查询时ArrayList效率高,增删时LinkedList高.由于List中 ...
- [C#编程参考]把图像转换为数组的两种实现
当一个程序和一个图片放在一起,无非有两种操作: 第一种,就是传输这个图片,在传输图片之前要首先把这个图片变成byte类型的数组.所以这时候我们用到的是图片的存储的数据,也就是图片属性中的大小.我们并不 ...
- cocos2d-x中的CCScrollView滑动体验不佳
在最近的项目中,使用了Cocos2d-x (2.2.0版本)提供的CCScrollView来拖动一个比较大的画面,但是发现滑动体验非常不佳, 手指离开屏幕后,滑动没有惯性,一个不算太大的画面,要滑动好 ...
- 这家伙,搞了好多C#excel的操作,学习了
http://www.cnblogs.com/peterzb/archive/2009/07/06/1517395.html
- shopnc b2b2c如何开启伪静态??
shopnc b2b2c开启伪静态的方法 一. windows环境下 1.先下载isapi rewrite插件,安装,然后我们把根目录下面的htaccess.txt那么修改成.htaccess即可. ...
- what does Html.HiddenFor () for ?
When I want to pass some value that won't be seen by users, I find it useful to use this. It can hel ...
- [转]IOS Segment页面之间view的切换
有三个view,分别为view1.view2.view3,通过UISegmentedControl进行三个view的切换. @interface UIViewDemoViewController : ...
- HDU 1997 汉诺塔VII
题解参考博客: http://blog.csdn.net/hjd_love_zzt/article/details/9897281 #include <cstdio> ],yes; int ...
- poj 2001 Shortest Prefixes(字典树)
题目链接:http://poj.org/problem?id=2001 思路分析: 在Trie结点中添加数据域childNum,表示以该字符串为前缀的字符数目: 在创建结点时,路径上的所有除叶子节点以 ...
- Android JNI入门第五篇——基本数据类型使用
前面讲到了java和native数据类型,这里就开始做一下使用: 第一步:新建工程 第二部:书写 java方法: public class NativeMethod { static { System ...