iOS开发之多文件上传





//
// ViewController.m
// B03-多文件上传
//
// Created by 0426iOS on 15/7/1.
// Copyright (c) 2015年 0426iOS. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSString *strUrl = @"http://127.0.0.1/upload/upload-m.php";
//加载两个文件
NSString *fileName1 = @"oo.png";
NSString *path1 = [[NSBundle mainBundle] pathForResource:fileName1 ofType:nil];
NSData *data1 = [NSData dataWithContentsOfFile:path1];
NSString *fileName2 = @"xx.png";
NSString *path2 = [[NSBundle mainBundle] pathForResource:fileName2 ofType:nil];
NSData *data2 = [NSData dataWithContentsOfFile:path2];
NSDictionary *files = @{fileName1:data1,fileName2:data2};
NSDictionary *params = @{@"username":@"hhhhhhhhhhh"};
//上传多个文件
[self uploadFiles:strUrl files:files name:@"userfile[]" params:params];
}
#define kBOUNDARY @"aabbcc"
//上传多个文件
- (void)uploadFiles:(NSString *)strUrl files:(NSDictionary *)files name:(NSString *)name params:(NSDictionary *)param{
NSURL *url = [NSURL URLWithString:strUrl];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"post";
//Content-Type:multipart/form-data; boundary=----WebKitFormBoundarycwuJbGNWchuHGPRT
NSString *ct = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",kBOUNDARY];
[request setValue:ct forHTTPHeaderField:@"Content-Type"];
//
request.HTTPBody = [self makeBody:files name:name params:param];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
//
if (!connectionError) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
if (httpResponse.statusCode == 200) {
//
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
NSLog(@"%@",json);
}else{
NSLog(@"服务器内部错误");
}
}else{
NSLog(@"请求错误%@",connectionError);
}
}];
}
//
- (NSData *)makeBody:(NSDictionary *)files name:(NSString *)name params:(NSDictionary *)param{
NSMutableData *mData = [NSMutableData data];
//准备文件
[files enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSData *data, BOOL *stop) {
// ------WebKitFormBoundarycwuJbGNWchuHGPRT
// Content-Disposition: form-data; name="userfile[]"; filename="Snip20150701_10.png"
// Content-Type: image/png
//1
NSMutableString *mStr = [NSMutableString string];
[mStr appendFormat:@"\r\n--%@\r\n",kBOUNDARY];
[mStr appendFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",name,key];
[mStr appendString:@"application/octet-stream\r\n"];
[mStr appendString:@"\r\n"];
[mData appendData:[mStr dataUsingEncoding:NSUTF8StringEncoding]];
//2
[mData appendData:data];
}];
//准备表单中的数据
[param enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, BOOL *stop) {
// ------WebKitFormBoundarycwuJbGNWchuHGPRT
// Content-Disposition: form-data; name="username"
//
// 345345
NSMutableString *mStr = [NSMutableString string];
[mStr appendFormat:@"\r\n--%@\r\n",kBOUNDARY];
[mStr appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n",key];
[mStr appendString:@"\r\n"];
[mStr appendFormat:@"%@\r\n",value];
[mData appendData:[mStr dataUsingEncoding:NSUTF8StringEncoding]];
}];
NSString *end = [NSString stringWithFormat:@"--%@--\r\n",kBOUNDARY];
[mData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
return mData.copy;
}
@end
iOS开发之多文件上传的更多相关文章
- iOS多线程与网络开发之小文件上传
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. /** 取得本地文件的MIMEType */ 2 - (void) getMIMEType { 3 // Socket 实现断点上传 4 5 //apa ...
- IOS开发 APP提交程序上传流程
由于苹果的机制,在非越狱机器上安装应用必须通过官方的App Store,开发者开发好应用后上传App Store,也需要通过审核等环节.AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传A ...
- Web开发安全之文件上传安全
很长一段时间像我这种菜鸡搞一个网站第一时间反应就是找上传,找上传.借此机会把文件上传的安全问题总结一下. 首先看一下DVWA给出的Impossible级别的完整代码: <?php if( iss ...
- asp.net(c#)开发中的文件上传组件uploadify的使用方法(带进度条)
上文件传很常见,现在就文件上传利用HTML的File控件(uploadify)的,这里为大家介绍一下(uploadify)的一些使用方法.在目前Web开发中用的比较多的,可能uploadify(参考h ...
- python运维开发(二十一)----文件上传和验证码+session
内容目录: 文件上传 验证码+session 文件和图片的上传功能 HTML Form表单提交,实例展示 views 代码 HTML ajax提交 原生ajax提交,XMLHttpRequest方式上 ...
- Spring boot+Vue全栈开发---Spring Boot文件上传
https://blog.csdn.net/Day_and_Night_2017/article/details/86980743 文件上传涉及到两个组件:CommonsMultipartResolv ...
- 分享一个FileUtil工具类,基本满足web开发中的文件上传,单个文件下载,多个文件下载的需求
获取该FileUtil工具类具体演示,公众号内回复fileutil20200501即可. package com.example.demo.util; import javax.servlet.htt ...
- IOS开发教程之put上传文件的服务器的配置及实例分享-备用
感谢大神分享 1,HTTP常见的方法 GET 获取指定资源 POST 2M 向指定资源提交数据进行处理请求,在RESTful风格中用于新增资源 HEAD 获取指定资源头部信息PUT 替换指定资源(不支 ...
- WPF开发的FTP文件上传工具
前言 最近楼主在改版的项目里有使用到FTP上传文件,所以看到之前的项目里FTP上传的功能,然后抽个时间学习一番,做着做着就作出了这个工具了(虽然有些验证的功能没加上),但是基本的上传功能还是很好用的, ...
随机推荐
- 将html文档转成pdf
(1)使用场景:在项目中使用到了合同,只有在合同的头部,是不相同的.在合同的主体部分都是相同的,因此就把他放到了模板(html文件)里面. 在用户线上签约完成之后,可以将pdf版的合同下载. (2)需 ...
- JavaScript中的模块化之AMD和CMD
前言: 为什么我们需要模块化开发,模块化开发的好处有哪些? 首先我们先说一下非模块化的开发方式带来的弊端. 非模块化开发中会导致一些问题的出现,变量和函数命名可能相同,会造成变量污染和冲突,并且出错时 ...
- Docker时间和宿主同步
通过date命令查看时间 查看主机时间 [root@localhost ~]# date 2016年 07月 27日 星期三 22:42:44 CST 查看容器时间 root@b43340ecf5ef ...
- Eclipse新建java类的时候,自动创建注释
为形成个人的java代码风格,我们在项目组中进行开发的时候,可以对自己的代码进行一些格式上面的设置,具体如下: 方法一:Eclipse中设置在创建新类时自动生成注释 windows–>prefe ...
- 织梦默认分页样式改动 解决分页列表显示,去掉li
近期装了个织梦dedecmsV5.7版本号时,调用分页显示出现的结果出现好几行,怎么也不能在一排显示,找了非常多资料,才了解到是由织梦模板中分页加了<Li>列表标签,解决有两种方法,以下将 ...
- GPU Instance
http://forum.china.unity3d.com/thread-17131-1-1.html https://docs.unity3d.com/Manual/GPUInstancing.h ...
- edittext SearchView 失去焦点问题
edittext 默认自己主动获取焦点的 并且会出现小键盘非常烦人 <LinearLayout android:id="@+id/focus" ...
- hive开窗函数over(partition by ......)用法
一.over(partition by ......)主要和聚合函数sum().count().avg()等结合使用,实现分组聚合的功能 示列:根据day_id日期和mac_id机器码进行聚合分组求每 ...
- 倍福TwinCAT(贝福Beckhoff)应用教程11.1 TwinCAT应用小程序1 贝福IO模块介绍
EL1002,EL1004,EL1008都是数字输入模块(2个点,4个点,8个点),输入高的范围是15V到30V,低的范围是-3V到5V EL2002,EL2004,EL2008都是数 ...
- Unity 配置静态excel 工作流程
TP:FCEE652B cause how improvement cause 在游戏开发的过程中,很多时候需要策划填的一些静态数据表(比如英雄表,技能表等等),而策划一般都习惯使用excel. ex ...