文档章节

iOS网络 AFN简单的上传 与 session上传带进度数据

沉恋
 沉恋
发布于 2015/02/22 14:02
字数 435
阅读 713
收藏 1

精选30+云产品,助力企业轻松上云!>>>

中间的拼接可以写个分类以简化

//
//  ViewController.m
//  AFN尝试
//
//  Created by chen on 15/2/22.
//  Copyright (c) 2015年 lanrw. All rights reserved.
//

#import "ViewController.h"
#import "AFNetworking.h"
@interface ViewController () <NSURLSessionTaskDelegate>
@property (nonatomic, strong) NSURLSession *session;
@end

@implementation ViewController

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

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    /**
     *  简单上传文件
     */
//    [self uploadFile];
    /**
     *  可打印出文件上传的进度条数据
     */
    [self uploadFile2];
}

/**
 *  不需要拼接也可以上传文件 (无进度数据)
 */
- (void)uploadFile
{
    AFHTTPRequestOperationManager *manger = [AFHTTPRequestOperationManager manager];
    [manger POST:@"http://localhost/post/upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        NSURL *url = [[NSBundle mainBundle]URLForResource:@"music.mp3.zip" withExtension:nil];
        [formData appendPartWithFileURL:url name:@"userfile" fileName:@"1.zip" mimeType:@"application/octet-stream" error:NULL];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"上传成功");
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"上传失败");
    }];
}

/**
 *  使用session上传 有进度条数据
 */
- (void)uploadFile2
{
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost/post/upload.php"]cachePolicy:1 timeoutInterval:7];
    
    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 = @"1.zip";
    
    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:@"music.mp3.zip" withExtension:nil];
    [myData appendData:[NSData dataWithContentsOfURL:uploadFile]];
    
    str = [NSString stringWithFormat:@"\n\n--%@--",boundary];
    [myData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
    
    request.HTTPBody = myData;
    [[self.session uploadTaskWithRequest:request fromData:myData]resume];
}

#pragma mark - 检测上传进度
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
   didSendBodyData:(int64_t)bytesSent
    totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
{
    float progress = (float)totalBytesSent / totalBytesExpectedToSend;
    NSLog(@"%f %@", progress, [NSThread currentThread]);
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
    NSLog(@"完成");
}

// 懒加载
- (NSURLSession *)session
{
    if(_session == nil)
    {
        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
        _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
    }
    return _session;
}

@end



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

沉恋
粉丝 9
博文 148
码字总数 63031
作品 0
苏州
私信 提问
加载中
请先登录后再评论。
ios开发之网络数据的下载与上传 要实现网络数据的下载与上传,主要有三种方式

NSURL *url = [NSURL URLWithString:urlString];// 2. 定义URLRequest,确定网络访问请求,在GET方法中直接用URL即可NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolic......

wakice
2017/03/19
0
0
iOS网络请求数据压缩

日常开发中,出于节省用户流量、解决大量数据上传下载阻塞服务器的问题,有时候将请求的数据包大小压缩一下,减小数据包,这样优化客户端网络就显得很必要,这里我列举了两种: 1、使用GZIP压...

RainOrz
2018/06/27
897
0
iOS开发之AFNetworking

1、概述 AFNetworking简称AFN,是iOS开发中主流第三方框架之一。苹果的一套框架NSContention发送请求与接收请求的方式十分繁琐。操作起来很不方便。不仅要做区分各种请求设置各种不同的参数,...

feng_blog
2015/09/03
644
0
iOS源码补完计划--AFNetworking(一)

目录 前言 AFURLSessionManager AFHTTPSessionManager API注释Demo 参考 前言 AFNetworking第一篇 主要看了看AFURLSessionManager以及AFHTTPSessionManager相关的API AFN概述:《iOS源码补完计...

kirito_song
2018/05/15
0
0
iOS源码补完计划--AFNetworking 3.1.0源码研读

参拜一下AFNetworking的源码。 第四篇源码、暂时来看也是iOS方向的最后一篇、撸完准备趁着热乎撸一撸网络协议。 目录 准备工作 功能模块 AFURLSessionManager/AFHTTPSessionManager AFNetwo...

kirito_song
2018/05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用getApplication()作为上下文的对话框抛出“无法添加窗口-令牌null不适用于应用程序”

问题: My Activity is trying to create an AlertDialog which requires a Context as a parameter. 我的活动试图创建一个AlertContext,它需要一个Context作为参数。 This works as expect......

法国红酒甜
38分钟前
11
0
java常用开发支持类库

UUID类 UUID是一个生成无重复字符串的程序类(JDK1.5之后出现),这个程序类的主要功能是根据时间戳实现一个自动的无重复的字符串定义(无重复指的是出现重复的概率极低)。 一般在获取UUID时...

哼着我的小调调
48分钟前
15
0
亚马逊测评买家号多开_可以解决这个问题嘛?_微信公众号: VMlogin中文版

对于很多亚马逊卖家来说,做亚马逊测评是并不可少的,都在为了自己的店铺能够获得更多的销售,着重培养自己产品的各项属性,以求获得一个更好的权重排名从而获得更多的曝光,但是在旺季期间亚...

竹节猫-ASOer
55分钟前
10
0
Java基础系列——数组之java.util.Arrays使用以及可能出现的异常(12)

java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比 如排序和搜索)的各种方法。常用方法如下所示: boolean equals(int[] a,int[] b) 判断两个数组是否相等。 String toStrin...

卢佳鹏
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部