文档章节

iOS网络 POST原始的模拟表单上传

沉恋
 沉恋
发布于 2015/02/16 23:05
字数 414
阅读 86
收藏 0

后台我使用的是php语言,你们也可以换成其他的语言

此种上传为模拟HTML表单上传 火狐浏览器firebug上抓取请求头的数据进行拼接

上代码ing。。。

//
//  ViewController.m
//  POST原始的模拟表单上传
//
//  Created by chen on 15/2/16.
//  Copyright (c) 2015年 lanrw. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self uploadFile];
}

- (void)uploadFile
{
    // 拼接以下请求
    /**
     Content-Type	multipart/form-data; boundary=8116616557813098411759479929
     
     --8116616557813098411759479929
     Content-Disposition: form-data; name="userfile"; filename="upload.html"
     Content-Type: text/html
     
     <!DOCTYPE html> <html > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>文件上传测试</title> </head> <body> <h1>文件上传</h1> <hr /> <form action="upload.php" method="post" enctype="multipart/form-data"> 请选择要上传的文件: <input name="userfile" type="file" /> <input type="submit" value="上传" /> </form> </body> </html>
     
     --8116616557813098411759479929--
     */
    
    // 自己建立一个php后端的服务器
    NSURL *url = [NSURL URLWithString:@"http://localhost/post/upload.php"];
    
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:15];
    request.HTTPMethod = @"post";
    
    // boundary可随意命名
    NSString *boundary = @"chen";
    
    // 拼接请求头
    [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary] forHTTPHeaderField:@"Content-Type"];
    
    // 创建可变data 后面一样拼接
    NSMutableData *myData = [NSMutableData data];
    
    NSString *str = [NSString stringWithFormat:@"--%@\n",boundary];
    [myData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
    
    // html页面上传表单里的 <input type="file" name="userfile">
    NSString *name = @"userfile";
    // 上传后文件的名字
    NSString *filename = @"123.png";
    
    str = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\n",name,filename];
    [myData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];

    str = @"Content-Type: application/octet-stream\n\n";
    [myData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
    
    // bundle中的文件转换成二进制数据
    NSURL *uploadFile = [[NSBundle mainBundle]URLForResource:@"000.png" withExtension:nil];
    [myData appendData:[NSData dataWithContentsOfURL:uploadFile]];

    str = [NSString stringWithFormat:@"\n\n--%@--",boundary];
    [myData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
    
    request.HTTPBody = myData;
    
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
        NSLog(@"%@",result);
    }];
}

@end



http://pan.baidu.com/s/1eQCMbdS

© 著作权归作者所有

共有 人打赏支持
沉恋
粉丝 9
博文 148
码字总数 63031
作品 0
苏州
私信 提问
LivePhoto开发,你要知道的知识点

前言 Apple从iPhone6s开始支持Live Photo。Live Photo 会录下拍照前后 1.5 秒所发生的一切,因此用户获得的不仅仅是一张精美照片,还有拍照前后时刻的动作和声音。具体的操作可以参见拍照和编...

zhanggui
07/09
0
0
iPhone 4 与 iPhone 5 在 iOS 7 下的较量

苹果公司于今年WWDC 2013最新发表的iOS 7系统,支持 iOS 7的机型包括 iPhone 4、iPhone 4S、iPhone 5、iPod touch 16GB / 32GB / 64GB、iPad 2、iPad 3、iPad 4 和 iPad mini。不过并不是支持...

it224
2013/07/21
2.2K
6
AFNetworking是一个为 iOS 和 Mac OSX 制作的令人愉快的网络库

AFNetworking是一个为 iOS 和 Mac OSX 制作的令人愉快的网络库,它建立在URL 装载系统框架的顶层,内置在Cocoa里,扩展了强有力的高级网络抽象。它的模块架构被良好的设计,拥有丰富的功能,...

lewis-180
2015/04/02
0
0
EBMIDE——相关文章索引

EBMIDE主项目 EBMIDE——序 EBMIDE——服务脚本IOS EBMIDE——服务调用 EBMIDE——表单、报表模板设计 EBMIDE——服务脚本IOS编辑器 EBMIDE——ORM数据实体编辑器 EBMIDE——服务脚本IOS(二)...

彭博
2012/03/09
70
0
dropbox 死掉后 IOS 7.1 应用发布替代解决方案

由于大家都知道的原因Dropbox 挂掉了,免费的 https文件分享链接没有了,广大通过 dropbox https 分享链接来发布ios应用的童鞋悲剧了 。今天就给大家支个招儿。 分析 ios 7.1 安装链接 格式 ...

LuoZhihui
2014/07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MYSQL事务处理

INNODB 事务里,所有表引擎必须为INNODB,在非实务表上操作,不会警告,不会报错,但没有效果

关元
5分钟前
0
0
cmake 编译脚本

#!/bin/sh test -d build || mkdir -p build cd build cmake .. make

shzwork
22分钟前
2
0
从零开始实现Vue简单的Toast插件

概述: 在前端项目中,有时会需要通知、提示一些信息给用户,尤其是在后台系统中,操作的正确与否,都需要给与用户一些信息。 1. 实例 在Vue组件的methods内,调用如下代码 `this``.$toast({...

前端小攻略
27分钟前
1
0
yaf和yaconf

pecl install yafpecl install yaconf [yaf] yaf.environ = dev yaf.use_spl_autoload = On yaf.use_namespace = 1 [yaconf] yaconf.directory = /data/wwwroot/yaconf......

果树啊
27分钟前
0
0
day01:shell基础(shell基础、alias及重定向)

1、shell基础介绍: shell是一个命令解释器,用于用户与机器的交互: 也支持特定的语法(逻辑判断,循环): 每个用户都有自己特定的shell:Centos7的shell是bash(bourne agin shell): shel...

芬野de博客
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部