首页 > 代码库 > [iOS 多线程 & 网络 - 2.11] - ASI框架上传文件

[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 =http://www.mamicode.com/ 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 - UIImagePickerControllerDelegate155 /** 完成选择照片代理方法 */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

 

 
 
 

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