ios网络学习------10 原生API文件上传
使用原生态的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文件上传的更多相关文章
- ios网络学习------11 原生API文件上传之断点续传思路
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVhbmcyMDA5MzAzNTEz/font/5a6L5L2T/fontsize/400/fill/I0 ...
- iOS开发之网络编程--使用NSURLConnection实现文件上传
前言:使用NSURLConnection实现文件上传有点繁琐. 本文并没有介绍使用第三方框架上传文件. 正文: 这里先提供用于编码测试的接口:http://120.25.226.186:3281 ...
- JavaScrip 原生多文件上传及预览 兼容多浏览器
JavaScrip 原生多文件上传及预览 兼容多浏览器 html代码块 <div class="container"> <label>请选择一个图像文件:& ...
- 【Java Web开发学习】Spring MVC文件上传
[Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...
- Asp.Net Core 3.0 学习3、Web Api 文件上传 Ajax请求以及跨域问题
1.创建Api项目 我用的是VS2019 Core3.1 .打开Vs2019 创建Asp.Net Core Web应用程序命名CoreWebApi 创建选择API 在Controller文件夹下面添加 ...
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 用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 第三 ...
- 渗透测试学习 十五、 文件上传&&解析漏洞
大纲:文件解析漏洞 上传本地验证绕过 上传服务器验证绕过 文件解析漏洞 解析漏洞主要说的是一些特殊文件被IIS.Apache.Nginx在某些情况下解释成脚本文件格式的漏洞. IIS 5.x/6.0解 ...
- (转载)JavaWeb学习总结(五十)——文件上传和下载
源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...
随机推荐
- 1.Centos-Docker安装和使用
1.安装docker yum install -y epel-release yum install -y docker-io 如果需要安装最新的docker,最好将系统升级到最新版 yum inst ...
- WritePrivateProfileString等读写.ini配置文件
配置文件中经常用到ini文件,在VC中其函数分别为: 写入.ini文件: BOOL WritePrivateProfileString( LPCTSTR lpAppName, // INI文件中的一个 ...
- 安装CentOS 7 遇到的坑
1,U盘安装 1.1 用最新版UltraISO刻录到U盘 坑1,如果之前不是用UltraISO刻录,或者不是最新版,u盘的label就不是系统自带的,当你选择install centos 7然后ta ...
- [BZOJ2738]矩阵乘法 整体二分+二维树状数组
2738: 矩阵乘法 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1643 Solved: 715[Submit][Status][Discuss ...
- jQuery实现日期字符串格式化
1. js仿后台的字符串的StringFormat方法 function StringFormat() { if (arguments.length == 0) return null; var st ...
- asp.net如何更改默认的登陆帐号/密码:16aspx/16aspx
修改数据库,在DB_16aspx文件夹下面 sql server 2005+的数据库打开.
- codeforces-574B
题目连接:http://codeforces.com/contest/574/problem/B B. Bear and Three Musketeers time limit per test 2 ...
- hdu5884(多叉哈夫曼树)
hdu5884 题意 给出 n 个数,每次选择不超过 k 个数合并(删掉这些数,加入这些数的和),花费为合并的这些数的和,要求最后只剩下一个数,问 k 最小取多少. 分析 二分 k,合并数的时候可以按 ...
- Beginning iOS 8 Programming with Swift-TableView
UITableView控件使用 使用UITableView,在控件库中,拖拽一个Table View到ViewController中,在Controller的后台代码中需要继承UITableViewD ...
- KD-Tree复习笔记(BZOJ1941 & BZOJ2648 & BZOJ4066)
快一年了都没碰到什么必须用KDT的题目导致模板完全忘光了,重新复习了一下. K_Dimention_Tree是一种用来处理二维以上问题的数据结构(OI中一般都是二维),本质是二维启发式估价函数实现剪枝 ...