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

  1. #import "MainViewController.h"
  2.  
  3. @interface MainViewController ()
  4. @property (weak, nonatomic) UIImageView *imageView;
  5. @end
  6.  
  7. @implementation MainViewController
  8.  
  9. - (void)viewDidLoad
  10. {
  11. [super viewDidLoad];
  12. //定义Imageview并设置图像
  13. UIImage *image = [UIImage imageNamed:@"头像1.png"];
  14. UIImageView *imageView = [[UIImageView alloc]initWithImage:image];
  15. [imageView setFrame:CGRectMake(60, 20, 200, 200)];
  16. [self.view addSubview:imageView];
  17. self.imageView = imageView;
  18.  
  19. UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  20. [button setFrame:CGRectMake(60, 240, 200, 40)];
  21.  
  22. [button setTitle:@"upload" forState:UIControlStateNormal];
  23. [self.view addSubview:button];
  24.  
  25. [button addTarget:self action:@selector(uploadImage) forControlEvents:UIControlEventTouchUpInside];
  26. [self.view addSubview:button];
  27. }
  28.  
  29. #pragma mark 上传文件(图像)
  30. - (void)uploadImage
  31. {
  32. NSLog(@"upload");
  33. //思路: 须要使用http的post方法上传文件
  34. //调用的url是http://localhost/~apple/itcast/upload.php
  35. //数据体的參数名:file
  36.  
  37. //1建立URL
  38. NSURL *url = [NSURL URLWithString:@"http://localhost/~apple/itcast/upload.php"];
  39. //2建立NSMutableRequest
  40. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
  41. //1)设置request的属性。设置方法
  42. [request setHTTPMethod:@"POST"];
  43.  
  44. //2)设置数据体
  45. //1> 设置boundary的字符串,能够复用
  46.  
  47. NSString *boundary = @"uploadBoundary";
  48. //2>头部字符串
  49.  
  50. NSMutableString *startStr = [NSMutableString string];
  51. [startStr appendFormat:@"--%@\n", boundary];
  52. [startStr appendString:@"Content-Disposition: form-data; name=\"file\"; filename=\"upload.png\"\n"];
  53. [startStr appendString:@"Content-Type: image/png\n\n"];
  54.  
  55. //3>尾部字符串
  56. NSMutableString *endStr = [NSMutableString string];
  57. [endStr appendFormat:@"--%@\n", boundary];
  58. [endStr appendString:@"Content-Disposition: form-data: name=\"submit\"\n\n"];
  59. [endStr appendString:@"Submit\n"];
  60. [endStr appendFormat:@"--%@--", boundary];
  61.  
  62. //4>拼接数据体
  63. NSMutableData *bodyData = [NSMutableData data];
  64. [bodyData appendData:[startStr dataUsingEncoding:NSUTF8StringEncoding]];
  65. NSData *imageData = UIImagePNGRepresentation(self.imageView.image);
  66. [bodyData appendData:imageData];
  67. [bodyData appendData:[endStr dataUsingEncoding:NSUTF8StringEncoding]];
  68. [request setHTTPBody:bodyData];
  69.  
  70. //5>指定Content-Type,在上传文件时,须要指定content-type和content-length
  71. NSString *contentStr = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
  72. [request setValue:contentStr forKey:@"Content-Type"];
  73.  
  74. //6>指定Content-Length
  75. NSInteger length = [bodyData length];
  76. [request setValue:[NSString stringWithFormat:@"%d", length] forKey:@"Content-Length"];
  77.  
  78. //3使用NSURLConnection的同步方法上传文件。由于须要用户确认文件是否上传成功。
  79.  
  80. //在使用http上传文件时,一般是有限制大小的。一般不会超过2M.
  81. NSURLResponse *response = nil;
  82. NSError *error = nil;
  83. NSData *resultData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
  84. NSString *resultStr = [[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
  85. NSLog(@"%@", resultStr);
  86. }
  87.  
  88. @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. 1.Centos-Docker安装和使用

    1.安装docker yum install -y epel-release yum install -y docker-io 如果需要安装最新的docker,最好将系统升级到最新版 yum inst ...

  2. WritePrivateProfileString等读写.ini配置文件

    配置文件中经常用到ini文件,在VC中其函数分别为: 写入.ini文件: BOOL WritePrivateProfileString( LPCTSTR lpAppName, // INI文件中的一个 ...

  3. 安装CentOS 7 遇到的坑

    1,U盘安装 1.1  用最新版UltraISO刻录到U盘 坑1,如果之前不是用UltraISO刻录,或者不是最新版,u盘的label就不是系统自带的,当你选择install centos 7然后ta ...

  4. [BZOJ2738]矩阵乘法 整体二分+二维树状数组

    2738: 矩阵乘法 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1643  Solved: 715[Submit][Status][Discuss ...

  5. jQuery实现日期字符串格式化

    1. js仿后台的字符串的StringFormat方法 function StringFormat() { if (arguments.length == 0) return null; var st ...

  6. asp.net如何更改默认的登陆帐号/密码:16aspx/16aspx

    修改数据库,在DB_16aspx文件夹下面 sql server 2005+的数据库打开.

  7. codeforces-574B

    题目连接:http://codeforces.com/contest/574/problem/B B. Bear and Three Musketeers time limit per test 2 ...

  8. hdu5884(多叉哈夫曼树)

    hdu5884 题意 给出 n 个数,每次选择不超过 k 个数合并(删掉这些数,加入这些数的和),花费为合并的这些数的和,要求最后只剩下一个数,问 k 最小取多少. 分析 二分 k,合并数的时候可以按 ...

  9. Beginning iOS 8 Programming with Swift-TableView

    UITableView控件使用 使用UITableView,在控件库中,拖拽一个Table View到ViewController中,在Controller的后台代码中需要继承UITableViewD ...

  10. KD-Tree复习笔记(BZOJ1941 & BZOJ2648 & BZOJ4066)

    快一年了都没碰到什么必须用KDT的题目导致模板完全忘光了,重新复习了一下. K_Dimention_Tree是一种用来处理二维以上问题的数据结构(OI中一般都是二维),本质是二维启发式估价函数实现剪枝 ...