当前位置: 首页 > news >正文

源码0603-08-掌握-NSURLSession-上传

 

 

//  ViewController.m
//  08-掌握-NSURLSession-上传#define XMGBoundary @"520it"
#define XMGEncode(string) [string dataUsingEncoding:NSUTF8StringEncoding]
#define XMGNewLine [@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]

#import "ViewController.h"

@interface ViewController () 
/** session */
@property (nonatomic, strong) NSURLSession *session;
@end

@implementation ViewController

- (NSURLSession *)session
{
    if (!_session) {
        NSURLSessionConfiguration *cfg = [NSURLSessionConfiguration defaultSessionConfiguration];
        cfg.timeoutIntervalForRequest = 10;
        // 是否允许使用蜂窝网络(手机自带网络)
        cfg.allowsCellularAccess = YES;
        _session = [NSURLSession sessionWithConfiguration:cfg];
    }
    return _session;
}

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

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/upload"]];
    request.HTTPMethod = @"POST";
    
    // 设置请求头(告诉服务器,这是一个文件上传的请求)
    [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", XMGBoundary] forHTTPHeaderField:@"Content-Type"];
    
    // 设置请求体
    NSMutableData *body = [NSMutableData data];
    
    // 文件参数
    // 分割线
    [body appendData:XMGEncode(@"--")];
    [body appendData:XMGEncode(XMGBoundary)];
    [body appendData:XMGNewLine];
    
    // 文件参数名
    [body appendData:XMGEncode([NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"test.png\""])];
    [body appendData:XMGNewLine];
    
    // 文件的类型
    [body appendData:XMGEncode([NSString stringWithFormat:@"Content-Type: image/png"])];
    [body appendData:XMGNewLine];
    
    // 文件数据
    [body appendData:XMGNewLine];
    [body appendData:[NSData dataWithContentsOfFile:@"/Users/xiaomage/Desktop/test.png"]];
    [body appendData:XMGNewLine];
    
    // 结束标记
    /*
     --分割线--\r\n
     */
    [body appendData:XMGEncode(@"--")];
    [body appendData:XMGEncode(XMGBoundary)];
    [body appendData:XMGEncode(@"--")];
    [body appendData:XMGNewLine];
    
    [[self.session uploadTaskWithRequest:request fromData:body completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSLog(@"-------%@", [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]);
    }] resume];
}

@end

 

转载于:https://www.cnblogs.com/laugh/p/6611708.html

相关文章:

  • MapReduce实例——查询缺失扑克牌
  • list内变量排序
  • 【bzoj1507】 JSOI2008—Blue Mary的旅行
  • JZOJ 3.25 1420——【汕头市选2012初中组】求和(sum)
  • 报表reportviewer控件使用时,单行文本过长的解决办法
  • 【VB超简单入门】五、基本输出输入
  • WordPress基础知识:条件判断标签及用法大全
  • EF Code-First 学习之旅 Code First Conventions
  • Excel从零整理
  • 线段树建图
  • C#编程(七十六)----------使用指针实现基于栈的高性能数组
  • CSS-样式表的分类以及选择器的分类
  • childNodes与children
  • 发现一个很N且免费的html5拓扑图 关系图 生成组件
  • I2S
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • docker-consul
  • ECMAScript6(0):ES6简明参考手册
  • Fundebug计费标准解释:事件数是如何定义的?
  • gitlab-ci配置详解(一)
  • Hibernate【inverse和cascade属性】知识要点
  • java8-模拟hadoop
  • Javascript基础之Array数组API
  • Java基本数据类型之Number
  • js学习笔记
  • Just for fun——迅速写完快速排序
  • Linux CTF 逆向入门
  • node.js
  • Rancher-k8s加速安装文档
  • Spring Cloud Feign的两种使用姿势
  • V4L2视频输入框架概述
  • vue--为什么data属性必须是一个函数
  • win10下安装mysql5.7
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 关于Java中分层中遇到的一些问题
  • 每天一个设计模式之命令模式
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 我是如何设计 Upload 上传组件的
  • 新手搭建网站的主要流程
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 因为阿里,他们成了“杭漂”
  • 应用生命周期终极 DevOps 工具包
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ###C语言程序设计-----C语言学习(3)#
  • (03)光刻——半导体电路的绘制
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (70min)字节暑假实习二面(已挂)
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (办公)springboot配置aop处理请求.
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析