使用原生态的api上传文件的实现:

#import "MainViewController.h"

@interface MainViewController ()
@property (weak, nonatomic) UIImageView *imageView;
@end @implementation MainViewController - (void)viewDidLoad
{
[super viewDidLoad];
//定义Imageview并设置图像
UIImage *image = [UIImage imageNamed:@"头像1.png"];
UIImageView *imageView = [[UIImageView alloc]initWithImage:image];
[imageView setFrame:CGRectMake(60, 20, 200, 200)];
[self.view addSubview:imageView];
self.imageView = imageView; UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(60, 240, 200, 40)]; [button setTitle:@"upload" forState:UIControlStateNormal];
[self.view addSubview:button]; [button addTarget:self action:@selector(uploadImage) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
} #pragma mark 上传文件(图像)
- (void)uploadImage
{
NSLog(@"upload");
//思路: 须要使用http的post方法上传文件
//调用的url是http://localhost/~apple/itcast/upload.php
//数据体的參数名:file //1建立URL
NSURL *url = [NSURL URLWithString:@"http://localhost/~apple/itcast/upload.php"];
//2建立NSMutableRequest
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//1)设置request的属性。设置方法
[request setHTTPMethod:@"POST"]; //2)设置数据体
//1> 设置boundary的字符串,能够复用 NSString *boundary = @"uploadBoundary";
//2>头部字符串 NSMutableString *startStr = [NSMutableString string];
[startStr appendFormat:@"--%@\n", boundary];
[startStr appendString:@"Content-Disposition: form-data; name=\"file\"; filename=\"upload.png\"\n"];
[startStr appendString:@"Content-Type: image/png\n\n"]; //3>尾部字符串
NSMutableString *endStr = [NSMutableString string];
[endStr appendFormat:@"--%@\n", boundary];
[endStr appendString:@"Content-Disposition: form-data: name=\"submit\"\n\n"];
[endStr appendString:@"Submit\n"];
[endStr appendFormat:@"--%@--", boundary]; //4>拼接数据体
NSMutableData *bodyData = [NSMutableData data];
[bodyData appendData:[startStr dataUsingEncoding:NSUTF8StringEncoding]];
NSData *imageData = UIImagePNGRepresentation(self.imageView.image);
[bodyData appendData:imageData];
[bodyData appendData:[endStr dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:bodyData]; //5>指定Content-Type,在上传文件时,须要指定content-type和content-length
NSString *contentStr = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request setValue:contentStr forKey:@"Content-Type"]; //6>指定Content-Length
NSInteger length = [bodyData length];
[request setValue:[NSString stringWithFormat:@"%d", length] forKey:@"Content-Length"]; //3使用NSURLConnection的同步方法上传文件。由于须要用户确认文件是否上传成功。 //在使用http上传文件时,一般是有限制大小的。一般不会超过2M.
NSURLResponse *response = nil;
NSError *error = nil;
NSData *resultData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *resultStr = [[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
NSLog(@"%@", resultStr);
} @end

ios网络学习------10 原生API文件上传的更多相关文章

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

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVhbmcyMDA5MzAzNTEz/font/5a6L5L2T/fontsize/400/fill/I0 ...

  2. iOS开发之网络编程--使用NSURLConnection实现文件上传

    前言:使用NSURLConnection实现文件上传有点繁琐.    本文并没有介绍使用第三方框架上传文件. 正文: 这里先提供用于编码测试的接口:http://120.25.226.186:3281 ...

  3. JavaScrip 原生多文件上传及预览 兼容多浏览器

    JavaScrip 原生多文件上传及预览 兼容多浏览器 html代码块 <div class="container"> <label>请选择一个图像文件:& ...

  4. 【Java Web开发学习】Spring MVC文件上传

    [Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...

  5. Asp.Net Core 3.0 学习3、Web Api 文件上传 Ajax请求以及跨域问题

    1.创建Api项目 我用的是VS2019 Core3.1 .打开Vs2019 创建Asp.Net Core Web应用程序命名CoreWebApi 创建选择API 在Controller文件夹下面添加 ...

  6. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. 用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传

    第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三 ...

  8. 渗透测试学习 十五、 文件上传&&解析漏洞

    大纲:文件解析漏洞 上传本地验证绕过 上传服务器验证绕过 文件解析漏洞 解析漏洞主要说的是一些特殊文件被IIS.Apache.Nginx在某些情况下解释成脚本文件格式的漏洞. IIS 5.x/6.0解 ...

  9. (转载)JavaWeb学习总结(五十)——文件上传和下载

    源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...

随机推荐

  1. GPS经纬度的表示方法及换算

    想要认识GPS中的经纬度,就必须先了解GPS,知道经纬度的来源: 1. GPS系统组成 GPS是 Gloabal Positioning System 的简称,意为全球定位系统,主要由地面的控制站.天 ...

  2. AJAX中的同步加载与异步加载

    AJAX是四个单词的简写,其中Asynchronous即异步的意思,异步的链接可以同时发起多个,并且不会阻止JS代码执行.与之对应的概念是同步,同步的链接在同一时刻只会有一个,并且会阻止后续JS代码的 ...

  3. mysql高可用架构之-MHA学习

    此博文参考  博主:mysql高级DBA yayun  完成 简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司 ...

  4. 在vc6里头文件sys/timeb.h里struct timeb各变量的具体含义?

    timeb的定义:struct _timeb{         time_t time;          unsigned short millitm;          short timezon ...

  5. springBoot springCloud

    微服务功能的主要体现: 1)服务的注册与发现 Eureka ,Consul ,Zookeeper 2)服务的负载均衡 Ribbon 3)服务的容错 Hystrix 4)服务的网关 微服务中常用的网关组 ...

  6. C#设计模式学习笔记-单例模式(转)

    C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...

  7. [BZOJ1069][SCOI2007]最大土地面积 凸包+旋转卡壳

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3669  Solved: 1451[Submit][Sta ...

  8. UVALive(LA) 3644 X-Plosives (并查集)

    题意: 有一些简单化合物,每个化合物都由两种元素组成的,你是一个装箱工人.从实验员那里按照顺序把一些简单化合物装到车上,但这里存在安全隐患:如果车上存在K个简单化合物,正好包含K种元素,那么他们就会组 ...

  9. Job的使用

    1.Job完成状态监听: job.addJobChangeListener(new JobChangeAdapter() {            @Override            publi ...

  10. 彗星撞地球 | 近25万倍压缩的精品3D动画

    文章目录 写在前面 Prophecy<彗星撞地球> 下载地址 简概 注意 3D射击小游戏 下载地址 简概 写在前面 WareZ是个无形的组织,号称"不以赢利为目的纯技术团体&qu ...