[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

 

 
 
 
posted @ 2015-01-29 00:42  HelloVoidWorld  阅读(344)  评论(0编辑  收藏  举报