[iOS 多线程 & 网络 - 2.11] - ASI框架上传文件

A.ASI的上传功能基本使用

1.实现步骤

(1)创建请求

使用ASIFormDataRequest

(2)设置上传文件路径

(3)发送请求

2.上传相册相片

UIImagePickerController用来选择图片

设置图片来源,可以选择相册

使用代理 UIImagePickerControllerDelegate方法,选择完成之后取得相片

  1 //
  2 //  ViewController.m
  3 //  ASIUploadDemo
  4 //
  5 //  Created by hellovoidworld on 15/1/28.
  6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
  7 //
  8
  9 #import "ViewController.h"
 10 #import "ASIFormDataRequest.h"
 11
 12 @interface ViewController () <ASIProgressDelegate, UINavigationControllerDelegate,UIImagePickerControllerDelegate>
 13
 14 @property (weak, nonatomic) IBOutlet UIProgressView *progressView;
 15
 16 @property(nonatomic, strong) ASIFormDataRequest *request;
 17
 18 - (IBAction)startUploading;
 19
 20 @end
 21
 22 @implementation ViewController
 23
 24 - (void)viewDidLoad {
 25     [super viewDidLoad];
 26     // Do any additional setup after loading the view, typically from a nib.
 27
 28     // 显示网络请求状态
 29     [ASIHTTPRequest setShouldThrottleBandwidthForWWAN:YES];
 30 }
 31
 32 /** 回收 */
 33 - (void)dealloc {
 34     [self.request clearDelegatesAndCancel];
 35
 36 //    self.request = nil;
 37 }
 38
 39 #pragma mark - 上传方法
 40 - (IBAction)startUploading {
 41 //    [self upload];
 42 //    [self upload2];
 43
 44     [self uploadImageFromAlbum];
 45 }
 46
 47 #pragma mark - 上传文件
 48
 49 /** 上传方法1 */
 50 - (void) upload {
 51     // 1.创建请求
 52     NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/upload"];
 53     self.request = [ASIFormDataRequest requestWithURL:url];
 54
 55     // 2.设置上传文件
 56     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"bird.jpg" ofType:nil];
 57     [self.request setFile:filePath forKey:@"uploadedFile"];
 58
 59     // 3.设置其他参数
 60     [self.request setPostValue:@"tom" forKey:@"user"];
 61
 62     // 进度条
 63     self.request.uploadProgressDelegate = self.progressView;
 64
 65     // 程序进入后台,仍然继续发送请求,适合发送大文件时使用
 66     self.request.shouldContinueWhenAppEntersBackground = YES;
 67
 68     // 4.发送请求
 69     [self.request startAsynchronous];
 70
 71     // 5.监听请求
 72     self.request.completionBlock = ^{
 73         NSLog(@"上传完成!");
 74     };
 75 }
 76
 77
 78 /** 上传方法2,从新设置上传文件名和类型 */
 79 - (void) upload2 {
 80     // 1.创建请求
 81     NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/upload"];
 82     self.request = [ASIFormDataRequest requestWithURL:url];
 83
 84     // 2.设置上传文件
 85     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"bird.jpg" ofType:nil];
 86     // 从新设置上传文件名和类型
 87     [self.request setFile:filePath withFileName:@"my_file.jpg" andContentType:@"image/jpg" forKey:@"uploadedFile"];
 88
 89     // 3.设置其他参数
 90     [self.request setPostValue:@"tom" forKey:@"user"];
 91
 92     // 进度条
 93     self.request.uploadProgressDelegate = self.progressView;
 94
 95     // 程序进入后台,仍然继续发送请求,适合发送大文件时使用
 96     self.request.shouldContinueWhenAppEntersBackground = YES;
 97
 98     // 4.发送请求
 99     [self.request startAsynchronous];
100
101     // 5.监听请求
102     self.request.completionBlock = ^{
103         NSLog(@"上传完成!");
104     };
105 }
106
107 #pragma mark - 从相册/相机选择照片上传
108 - (void) uploadImageFromAlbum {
109     // 创建一个相片选择控制器
110     UIImagePickerController *imagePC = [[UIImagePickerController alloc] init];
111
112     // 设置来源
113 //    [imagePC setSourceType:UIImagePickerControllerSourceTypeCamera]; // 相机
114     [imagePC setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; // 相簿
115
116     // 设置代理
117     imagePC.delegate = self;
118
119     // 弹出相片控制器
120     [self presentViewController:imagePC animated:YES completion:^{
121         NSLog(@"开始选择相片");
122     }];
123 }
124
125 - (void) uploadImage:(UIImage *) image {
126     // 1.创建请求
127     NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/upload"];
128     self.request = [ASIFormDataRequest requestWithURL:url];
129
130     // 2.将上传图片转换成二进制数据
131     NSData *imageData = UIImagePNGRepresentation(image);
132
133     // 从新设置上传文件名和类型
134     [self.request setData:imageData withFileName:@"my_photo.png" andContentType:@"iamge/png" forKey:@"uploadedFile"];
135
136     // 3.设置其他参数
137     [self.request setPostValue:@"tom" forKey:@"user"];
138
139     // 进度条
140     self.request.uploadProgressDelegate = self.progressView;
141
142     // 程序进入后台,仍然继续发送请求,适合发送大文件时使用
143     self.request.shouldContinueWhenAppEntersBackground = YES;
144
145     // 4.发送请求
146     [self.request startAsynchronous];
147
148     // 5.监听请求
149     self.request.completionBlock = ^{
150         NSLog(@"上传完成!");
151     };
152 }
153
154 #pragma mark - UIImagePickerControllerDelegate
155 /** 完成选择照片代理方法 */
156 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
157
158     // 退出相片选择控制器
159     [picker dismissViewControllerAnimated:YES completion:^{
160         NSLog(@"已经选择相片,准备上传");
161     }];
162
163     // 得到上传图片
164     UIImage *image = info[UIImagePickerControllerOriginalImage];
165
166     // 上传图片
167     [self uploadImage:image];
168 }
169
170 @end
时间: 2024-10-11 06:20:29

[iOS 多线程 & 网络 - 2.11] - ASI框架上传文件的相关文章

[iOS 多线程 &amp; 网络 - 2.10] - ASI框架下载文件

A.ASI框架中的下载 1.实现步骤 在实际的开发中如果要使用asi框架来下载服务器上的文件,只需要执行下面简单的几个步骤即可. (1)创建请求对象:(2)设置下载文件保存的路径:(3)发送下载文件的网络请求(异步).按照上面的几个步骤执行,程序会自动开启异步线程,一点一点的把数据写入到指定的文件路径,而且不论是下载多大的文件都不会占用大量的内存空间. ASI框架是基于底层的cfnoteworking的,性能很好.当然也可以设置block,或者是监听下载的进度. 自动会使用“边下边写” 使用进度

[iOS 多线程 &amp; 网络 - 2.9] - ASI框架

A.ASI基本知识 1.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大. ASI的实现基于底层的CFNetwork框架,因此运行效率很高. ASI的github地址 https://github.com/pokeb/asi-http-request ASI的使用参考http://www.cnblogs.com/dotey/archive/2011/05/10/2041966.html http://www.oschina.net/question

[iOS 多线程 &amp; 网络 - 2.6] - 使用POST上传JSON数据 &amp; 多值参数

A.上传JSON 1.思路: 必须使用POST方法才能上传大量JSON数据 设置请求头:设置Content-Type 设置请求体,JSON实际相当于字典,可以用NSDictionary NSJSONSerialization把字典数据转换成JSON二进制 2.实现 1 // 2 // ViewController.m 3 // PostJsonDemo 4 // 5 // Created by hellovoidworld on 15/1/28. 6 // Copyright (c) 2015年

iOS开发网络篇—使用ASI框架进行文件下载

原文  http://www.cnblogs.com/wendingding/p/3961681.html iOS开发网络篇—使用ASI框架进行文件下载 说明 :本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYViewController.h" 2 #import "ASIHTTPRequest.h" 3 4 @interface YYViewController () 5 6 7 @

iOS 多线程 &amp; 网络 - 4.0 - AFN框架简单使用

A.AFN基本知识 1.概念 AFNetworking 是对NSURLConnection的封装 运行效率没有ASI高(因为ASI基于CFNetwork),但是使用简单 AFN支持ARC B.基本请求使用 1.基本使用 (1)头文件 AFNetworking.h (2)管理者类:AFHTTPRequestOperationManager (3)“GET”方法发送GET请求,使用“POST”方法发送POST请求 (4)使用字典发送参数 (5)block处理请求成功/失败 1 /** 发送 GET/

Android开发笔记(一百一十)使用http框架上传文件

HTTP上传 与文件下载相比,文件上传的场合不是很多,通常用于上传用户头像.朋友圈发布图片/视频动态等等,而且上传文件需要服务器配合,所以容易被app开发者忽略.就上传的形式来说,app一般采用http上传文件,很少用ftp上传文件. HttpURLConnection上传 很可惜Android没有提供专门的文件上传工具类,所以我们要自己写代码实现上传功能了.其实也不难,一样是按照普通网络访问的POST流程,只是要采用"multipart/form-data"方式来分段传输.另外文件上

关于JavaWeb不使用框架上传文件的简单实现

好像最低支持3.0的JavaWeb项目: 前台页面代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="GBK"> 5 <title>测试上传</title> 6 </head> 7 <body> 8 <form action="/fileup/upTest" enctype="multipart

android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件

AsyncHttpClient开源框架android-async-http还是非常方便的. AsyncHttpClient该类通经常使用在android应用程序中创建异步GET, POST, PUT和DELETE HTTP请求.请求參数通过RequestParams实例创建.响应通过重写匿名内部类 ResponseHandlerInterface的 方法处理. 1.看代码上传文件 public void uploadFile(ArrayList<String> sendFilesPath) {

网络编程之使用HttpClient上传文件的客户端和服务器

1.1客户端: HttpClient常用HttpGet和HttpPost这两个类,分别对应Get方式和Post方式. 无论是使用HttpGet,还是使用HttpPost,都必须通过如下3步来访问HTTP资源. 1.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象. 2.使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象. 3.通过HttpResp