iOS网络-通过NSURLConnection文件上传

//文件上传步骤
//01 修改请求方法为POST
//02 设置请求头信息,告知服务器这是一个文件上传
    //Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyadprzBVdfHIhqXJ
//03 设置请求体(有固定格式)
    //分隔符:----WebKitFormBoundaryyadprzBVdfHIhqXJ
    //1)拼接文件参数
    /*
     --分隔符
     Content-Disposition: form-data; name="file"; filename="Snip20160117_798.png"
     Content-Type: image/png
     空行
     文件参数
     */
    //2)拼接非文件参数
    /*
     --分隔符
     Content-Disposition: form-data; name="username"
     空行
     xiaomage
     */
    //3)结尾标识
    /*
     --分隔符--
     */
/*
 ------WebKitFormBoundaryyadprzBVdfHIhqXJ
 Content-Disposition: form-data; name="file"; filename="Snip20160117_798.png"
 Content-Type: image/png

 文件参数
 ------WebKitFormBoundaryyadprzBVdfHIhqXJ
 Content-Disposition: form-data; name="username"

 xiaomage
 ------WebKitFormBoundaryyadprzBVdfHIhqXJ--
 */

#import "ViewController.h"
#define Kboundary @"----WebKitFormBoundaryyadprzBVdfHIhqXJ"
#define KNewLine [@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]
@interface ViewController ()

@end

@implementation ViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self upload];
}

-(void)upload
{
    //1.确定请求路径
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/upload"];

    //2.创建可变的请求对象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    //3.修改请求方法为POST
    request.HTTPMethod = @"POST";

    //4.设置请求头信息
    //Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyadprzBVdfHIhqXJ
    NSString *header =[NSString stringWithFormat:@"multipart/form-data; boundary=%@",Kboundary];
    [request setValue:header forHTTPHeaderField:@"Content-Type"];

    NSMutableData *fileData = [NSMutableData data];
    //5.1拼接文件参数
    /*
     --分隔符
     Content-Disposition: form-data; name="file"; filename="Snip20160117_798.png"
     Content-Type: image/png
     空行
     文件参数
     */
    [fileData appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [fileData appendData:KNewLine];

    //name:参数名称---file 规定的
    //filename:上传到服务器之后以什么名称来保存
    NSString *strM =@"Content-Disposition: form-data; name=\"file\"; filename=\"123.png\"";
    [fileData appendData:[strM dataUsingEncoding:NSUTF8StringEncoding]];
    [fileData appendData:KNewLine];
    //Content-Type:文件的数据类型
    [fileData appendData:[@"Content-Type: image/png" dataUsingEncoding:NSUTF8StringEncoding]];
    [fileData appendData:KNewLine];
    [fileData appendData:KNewLine];

    UIImage *image = [UIImage imageNamed:@"Snip20160117_798"];
    NSData *imageData = UIImagePNGRepresentation(image);
    [fileData appendData:imageData];
    [fileData appendData:KNewLine];

    //5.2拼接非文件参数
    /*
     --分隔符
     Content-Disposition: form-data; name="username"
     空行
     xiaomage
     */

    [fileData appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [fileData appendData:KNewLine];
    //name:参数名称username(规定的)
    [fileData appendData:[@"Content-Disposition: form-data; name=\"username\"" dataUsingEncoding:NSUTF8StringEncoding]];
    [fileData appendData:KNewLine];
    [fileData appendData:KNewLine];
    [fileData appendData:[@"xiaomage" dataUsingEncoding:NSUTF8StringEncoding]];
    [fileData appendData:KNewLine];

    //5.3 结尾标识
    /*
     --分隔符--
     */
    [fileData appendData:[[NSString stringWithFormat:@"--%@--",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];

    //6.设置请求体
    request.HTTPBody = fileData;

    //7.发送异步请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {

        //8.解析数据
        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
    }];

}
@end
时间: 2024-12-11 12:06:09

iOS网络-通过NSURLConnection文件上传的相关文章

网络编程练习 -- 文件上传

LWTViewController.m // // LWTViewController.m // 网络编程练习 -- 文件上传 // // Created by apple on 14-6-30. // Copyright (c) 2014年 lwt. All rights reserved. // #import "LWTViewController.h" #define KStringToData(string) [string dataUsingEncoding:NSUTF8St

iOS 网络请求 NSURLSession 的上传文件方法

NSURLSession/NSURLConnection的上传文件方法 此篇文章的理论基础主要是与HTTP网络通信协议相关.为集中精力,可以先把TCP/IP协议这些置之不理,也就是先只关注HTTP的请求和响应的结构.HTTP完整的原理内容就此略过.在此只略提相关内容.文中涉及的设计源码可以通过这里获取 https://github.com/wuqingjian2015/uploadHelper,有意者可以去看看. HTTP是干什么用的呢? 先考虑一下以下应用过程: 从客户端向服务器端发起一个请求

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 {

黑马程序员---网络编程之文件上传

------- android培训.java培训.期待与您交流! ----------. 网络编程 (1)用编程语言来实现计算机的资源共享和信息传递. 计算机网络:多台独立的计算机用网络通信设备连接起来的网络.实现资源共享和数据传递. (2)网络通信的三要素 A:IP地址 计算机在网络中的唯一标识. 现在使用的是:"点分十进制" B:端口 应用程序的的标记. C:协议 通信的规则. UDP:不建立连接,数据打包传输,数据有限制,数据不可靠,速度快. TCP:建立连接,数据无限制,数据可

iOS-网络编程(二)文件上传和断点离线下载

一. iOS中发送HTTP请求的方案 在iOS中,我们常用发送HTTP请求的方案有苹果原生(自带)NSURLConnection:用法简单,最古老最经典最直接的一种方案 (iOS 9.0弃用)NSURLSession:功能比NSURLConnection更加强大,苹果目前比较推荐使用这种技术第三方框架AFNetworking:简单易用,提供了基本够用的常用功能,维护和使用者多 二. NSURLConnection (已弃用) 虽然NSURLConnection已经被弃用,但是我们还是要了解NSU

WiFi文件上传框架SGWiFiUpload

背景 在iOS端由于文件系统的封闭性,文件的上传变得十分麻烦,一个比较好的解决方案是通过局域网WiFi来传输文件并存储到沙盒中. 简介 SGWiFiUpload是一个基于CocoaHTTPServer的WiFi上传框架.CocoaHTTPServer是一个可运行于iOS和OS X上的轻量级服务端框架,可以处理GET和POST请求,通过对代码的初步改造,实现了iOS端的WiFi文件上传与上传状态监听. 下载与使用 目前已经做成了易用的框架,上传到了GitHub,点击这里进入,欢迎Star! 请求的

iOS开发助手、ipa上传工具、苹果APP快速上架辅助工具Appuploader

ipa上传助手Appuploader是一个iOS APP上架辅助助手,帮助开发者可以快速的申请iOS证书打包ipa文件上传到App Store审核. 非常方便的iOS上架助手,提升上架效率. ipa上传助手Appuploader官网 ipa上传助手Appuploader介绍 一.可以在Windows系统直接申请iOS证书上传ipa(不用苹果电脑也不用装Mac虚拟机) 二.帮助不懂上架流程.初次接触上架的开发者,快速掌握上架流程 在这可以学习iOS证书申请和各类证书用法.打包ipa文件.测试iOS

ios网络学习------11 原生API文件上传之断点续传思路

#import "MainViewController.h" @interface MainViewController () @end @implementation MainViewController - (void)viewDidLoad { [super viewDidLoad]; //下载文件 [self download]; } -(void)download { //1. NSURL NSURL *url = [NSURL URLWithString:@"ht

ios开发网络学习十二:NSURLSession实现文件上传

#import "ViewController.h" // ----WebKitFormBoundaryvMI3CAV0sGUtL8tr #define Kboundary @"----WebKitFormBoundaryjv0UfA04ED44AhWx" #define KNewLine [@"\r\n" dataUsingEncoding:NSUTF8StringEncoding] @interface ViewController ()&l