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中的文件上传 ...
随机推荐
- linux常用60条命令 转
Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命 ...
- CPU负载监控
#!/usr/bin/python #-*- encoding: utf-8 -*- import os import time while True: loadavg=os.popen(" ...
- hadoop使用supervisord
#安装 wget https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b ...
- jquery_EasyUI使用细节注意
一.属性key不加双引号,value加双引号,对于url的value,添加‘’单引号:url的访问地址可以使用以下格式: datagrid中的url格式: var datagrid; $(functi ...
- python--cProfile,memory_profiler,psutil
关于测试代码用了多长时间,我们之前介绍了timeit.相较于timeit,python中还有一个更加强大的模块,cProfile模块 (提到cProfile,其实还有一个profile,但profil ...
- flask框架基本使用(3)(session与cookies)
#转载请留言联系 flask 框架基本使用(1):https://www.cnblogs.com/chichung/p/9756935.html flask 框架基本使用(2):https://www ...
- AC日记——Little Elephant and Problem codeforces 221c
221C 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <iostream> #include ...
- (4)C#工具箱-菜单和工具栏
1.ContextMenuStrip(右键菜单栏) 把contextMenuStrip控件拖到窗体上,会在窗体下面显示,点击控件在最上行显示菜单栏,可以任意设置.(运行以后不会在界面上显示,它需要预控 ...
- Openjudge1388 Lake Counting【DFS/Flood Fill】
http://blog.csdn.net/c20182030/article/details/52327948 1388:Lake Counting 总时间限制: 1000ms 内存限制: ...
- HDU 5916: Harmonic Value Description
题目描述 The harmonic value of the permutation $p_1,p_2,\cdots p_n$ is$$\sum_{i=1}^{n-1} gcd(p_i.p_{i+1} ...