A.ASI的上传功能基本使用
1.实现步骤
(1)创建请求
使用ASIFormDataRequest
(2)设置上传文件路径
(3)发送请求
 
 
2.上传相册相片
UIImagePickerController用来选择图片
设置图片来源,可以选择相册
使用代理 UIImagePickerControllerDelegate方法,选择完成之后取得相片
 
 //
// ViewController.m
// ASIUploadDemo
//
// Created by hellovoidworld on 15/1/28.
// Copyright (c) 2015年 hellovoidworld. All rights reserved.
// #import "ViewController.h"
#import "ASIFormDataRequest.h" @interface ViewController () <ASIProgressDelegate, UINavigationControllerDelegate,UIImagePickerControllerDelegate> @property (weak, nonatomic) IBOutlet UIProgressView *progressView; @property(nonatomic, strong) ASIFormDataRequest *request; - (IBAction)startUploading; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // 显示网络请求状态
[ASIHTTPRequest setShouldThrottleBandwidthForWWAN:YES];
} /** 回收 */
- (void)dealloc {
[self.request clearDelegatesAndCancel]; // self.request = nil;
} #pragma mark - 上传方法
- (IBAction)startUploading {
// [self upload];
// [self upload2]; [self uploadImageFromAlbum];
} #pragma mark - 上传文件 /** 上传方法1 */
- (void) upload {
// 1.创建请求
NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/upload"];
self.request = [ASIFormDataRequest requestWithURL:url]; // 2.设置上传文件
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"bird.jpg" ofType:nil];
[self.request setFile:filePath forKey:@"uploadedFile"]; // 3.设置其他参数
[self.request setPostValue:@"tom" forKey:@"user"]; // 进度条
self.request.uploadProgressDelegate = self.progressView; // 程序进入后台,仍然继续发送请求,适合发送大文件时使用
self.request.shouldContinueWhenAppEntersBackground = YES; // 4.发送请求
[self.request startAsynchronous]; // 5.监听请求
self.request.completionBlock = ^{
NSLog(@"上传完成!");
};
} /** 上传方法2,从新设置上传文件名和类型 */
- (void) upload2 {
// 1.创建请求
NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/upload"];
self.request = [ASIFormDataRequest requestWithURL:url]; // 2.设置上传文件
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"bird.jpg" ofType:nil];
// 从新设置上传文件名和类型
[self.request setFile:filePath withFileName:@"my_file.jpg" andContentType:@"image/jpg" forKey:@"uploadedFile"]; // 3.设置其他参数
[self.request setPostValue:@"tom" forKey:@"user"]; // 进度条
self.request.uploadProgressDelegate = self.progressView; // 程序进入后台,仍然继续发送请求,适合发送大文件时使用
self.request.shouldContinueWhenAppEntersBackground = YES; // 4.发送请求
[self.request startAsynchronous]; // 5.监听请求
self.request.completionBlock = ^{
NSLog(@"上传完成!");
};
} #pragma mark - 从相册/相机选择照片上传
- (void) uploadImageFromAlbum {
// 创建一个相片选择控制器
UIImagePickerController *imagePC = [[UIImagePickerController alloc] init]; // 设置来源
// [imagePC setSourceType:UIImagePickerControllerSourceTypeCamera]; // 相机
[imagePC setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; // 相簿 // 设置代理
imagePC.delegate = self; // 弹出相片控制器
[self presentViewController:imagePC animated:YES completion:^{
NSLog(@"开始选择相片");
}];
} - (void) uploadImage:(UIImage *) image {
// 1.创建请求
NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/upload"];
self.request = [ASIFormDataRequest requestWithURL:url]; // 2.将上传图片转换成二进制数据
NSData *imageData = UIImagePNGRepresentation(image); // 从新设置上传文件名和类型
[self.request setData:imageData withFileName:@"my_photo.png" andContentType:@"iamge/png" forKey:@"uploadedFile"]; // 3.设置其他参数
[self.request setPostValue:@"tom" forKey:@"user"]; // 进度条
self.request.uploadProgressDelegate = self.progressView; // 程序进入后台,仍然继续发送请求,适合发送大文件时使用
self.request.shouldContinueWhenAppEntersBackground = YES; // 4.发送请求
[self.request startAsynchronous]; // 5.监听请求
self.request.completionBlock = ^{
NSLog(@"上传完成!");
};
} #pragma mark - UIImagePickerControllerDelegate
/** 完成选择照片代理方法 */
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { // 退出相片选择控制器
[picker dismissViewControllerAnimated:YES completion:^{
NSLog(@"已经选择相片,准备上传");
}]; // 得到上传图片
UIImage *image = info[UIImagePickerControllerOriginalImage]; // 上传图片
[self uploadImage:image];
} @end
 
 
 

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

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

    A.ASI框架中的下载 1.实现步骤 在实际的开发中如果要使用asi框架来下载服务器上的文件,只需要执行下面简单的几个步骤即可. (1)创建请求对象:(2)设置下载文件保存的路径:(3)发送下载文件的 ...

  2. [iOS 多线程 & 网络 - 2.9] - ASI框架

    A.ASI基本知识 1.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大. ASI的实现基于底层的CFNetwork框架,因此运行效率很高. ASI的g ...

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

    A.上传JSON 1.思路: 必须使用POST方法才能上传大量JSON数据 设置请求头:设置Content-Type 设置请求体,JSON实际相当于字典,可以用NSDictionary NSJSONS ...

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

    iOS开发网络篇—使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: #import "YYViewCo ...

  5. [iOS 多线程 & 网络 - 4.0] - AFN框架简单使用

    A.AFN基本知识 1.概念 AFNetworking 是对NSURLConnection的封装 运行效率没有ASI高(因为ASI基于CFNetwork),但是使用简单 AFN支持ARC     B. ...

  6. Android 利用an框架快速实现网络请求(含下载上传文件)

    作者:Bgwan链接:https://zhuanlan.zhihu.com/p/22573081来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. an框架的网络框架是完全 ...

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

    AsyncHttpClient开源框架android-async-http还是非常方便的. AsyncHttpClient该类通经常使用在android应用程序中创建异步GET, POST, PUT和 ...

  8. 『网络の转载』关于初学者上传文件到github的方法

    说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午.终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:) 废话不多说,直接来,这次主要介绍 ...

  9. JAVAWeb SSH框架 上传文件,如2007的EXCEL

    下面的代码是上传EXCEL的代码,其实,就是在上传文件到服务器,代码都差不多,只是接收的文件的类型改一下即可. 1.jsp 用的是struts2 标签 代码: <s:file name=&quo ...

随机推荐

  1. git版本库底层命令

    当我们在使用git的时候,有时候需要知道当前文件夹相对于工作目录根目录的相对路径等等,那么我们可以使用 git rev-parse 添加一个参数就可以实现,如: 显示当前仓库版本库 .git 目录所在 ...

  2. sqlserver得到昨天的数据

    SELECT * FROM test where DATEDIFF(d,witdate,getdate()) = 1 witdate表示的比较字段

  3. vs2008 编译时候 自动关闭 问题解决方法

    最近又出现如此让人崩溃的问题.      vs2008在编译程序时候老是莫名其妙的自动退出.卸载重装以后问题仍然存在.      害我一度以为是vs2008的BUG,看网上说的更新BUG.      ...

  4. fancybox 关闭弹出窗口 parent.$.fancybox.close(); 无反应 fancybox 关闭弹出窗口父页面自动刷新,弹出子窗口前后事件

    当我们在父页面使用 fancybox 弹出窗口后,如果想自己手动关闭,则可以 function Cancel() { parent.$.fancybox.close(); } 如果关闭没有反应,最好看 ...

  5. HDU 2444 The Accomodation of Students (偶图判定,匈牙利算法)

    题意: 有一堆的学生关系,要将他们先分成两个组,同组的人都不互不认识,如果不能分2组,输出No.若能,则继续.在两组中挑两个认识的人(每组各1人)到一个双人房.输出需要多少个双人房? 思路: 先判定是 ...

  6. phpDoc 注释案例说明

    <?php /** * start page for webaccess * * PHP version 5 * * @category PHP * @package PSI_Web * @au ...

  7. poj 3352 Road Construction

    // 只能说这题和上题一模一样// 我就直接贴上题代码了.. #include <iostream> #include <algorithm> #include <que ...

  8. 查看buffer cache命中率

    SQL> select name,value from v$sysstat where name in('db block gets','consistent gets','physical r ...

  9. cmd远程连接数据库

    在本地配置tnsname 打开C:\oracle\ora92\network\ADMIN\tnsnames.ora 加入如下参数. ora = (DESCRIPTION = (ADDRESS_LIST ...

  10. Arc Engine 中添加气泡提示框

    一.在ArcMap中的定位操作 已知若干点的经纬度坐标,要求在地图中进行定位: 1.通过Tool >Add X Y data 定位点,注意选择地理坐标系下的wgs 1984坐标系: 2.定位后的 ...