[iOS 多线程 & 网络 - 2.11] - ASI框架上传文件
//
// 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框架上传文件的更多相关文章
- [iOS 多线程 & 网络 - 2.10] - ASI框架下载文件
A.ASI框架中的下载 1.实现步骤 在实际的开发中如果要使用asi框架来下载服务器上的文件,只需要执行下面简单的几个步骤即可. (1)创建请求对象:(2)设置下载文件保存的路径:(3)发送下载文件的 ...
- [iOS 多线程 & 网络 - 2.9] - ASI框架
A.ASI基本知识 1.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大. ASI的实现基于底层的CFNetwork框架,因此运行效率很高. ASI的g ...
- [iOS 多线程 & 网络 - 2.6] - 使用POST上传JSON数据 & 多值参数
A.上传JSON 1.思路: 必须使用POST方法才能上传大量JSON数据 设置请求头:设置Content-Type 设置请求体,JSON实际相当于字典,可以用NSDictionary NSJSONS ...
- iOS开发网络篇—使用ASI框架进行文件下载
iOS开发网络篇—使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: #import "YYViewCo ...
- [iOS 多线程 & 网络 - 4.0] - AFN框架简单使用
A.AFN基本知识 1.概念 AFNetworking 是对NSURLConnection的封装 运行效率没有ASI高(因为ASI基于CFNetwork),但是使用简单 AFN支持ARC B. ...
- Android 利用an框架快速实现网络请求(含下载上传文件)
作者:Bgwan链接:https://zhuanlan.zhihu.com/p/22573081来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. an框架的网络框架是完全 ...
- android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件
AsyncHttpClient开源框架android-async-http还是非常方便的. AsyncHttpClient该类通经常使用在android应用程序中创建异步GET, POST, PUT和 ...
- 『网络の转载』关于初学者上传文件到github的方法
说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午.终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:) 废话不多说,直接来,这次主要介绍 ...
- JAVAWeb SSH框架 上传文件,如2007的EXCEL
下面的代码是上传EXCEL的代码,其实,就是在上传文件到服务器,代码都差不多,只是接收的文件的类型改一下即可. 1.jsp 用的是struts2 标签 代码: <s:file name=&quo ...
随机推荐
- Android开发之Okhttp:java.lang.IllegalStateException: closed
在使用Okhttp的时候 运行到response.body().string()一步时抛异常,java.lang.IllegalStateException: closed 查阅各种资料大致意思是Th ...
- centos6.5安装mongodb
搜索正面五个文件,由于MongoDB的redhat国外镜像访问非常慢,下载安装suse版本并安装: mongodb-org-2.6.6-1.i686.rpm mongodb-org-mongos-2. ...
- oracle视图总结(转)
视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表.视图是存储在数据字典里的一条select语句. 通过创建视图可以提取数 ...
- 1109. Conference(二分图)
1109 二分图的模板题 不过这题题意 我纠结了好久 不知道是不是我对二分图不熟悉的原因 这题就是说 有n+m个人参加会议 要在这n+m中进行通话 求最少的连接数 就是每个人都得被连接上 这样求最大匹 ...
- java.lang.NoClassDefFoundError: javax/wsdl/OperationType
You should find the javax.wsdl package inside wsdl4j.jar Check for the line starting with 'Found IBM ...
- 使用ffmpeg实现转码样例(代码实现)
分类: C/C++ 使用ffmpeg实现转码样例(代码实现) 使用ffmpeg转码主要工作如下: Demux -> Decoding -> Encoding -> Muxing 其中 ...
- android.view.ViewRootImpl$CalledFromWrongThreadException错误处理
一般情况下,我们在编写android代码的时候,我们会将一些耗时的操作,比如网络访问.磁盘访问放到一个子线程中来执行.而这类操作往往伴随着UI的更新操作.比如说,访问网络加载一张图片 new Thre ...
- 我的ECshop二次开发从零开始
我是一个EC新手,EC就算做再多的模板,肯定也满足不了我们的需要,更何况各行有各行的门道,EC统一做出来的模板也不一定合适于我们这个行业用,因此,只有我们真正掌握了自己做模板,修改模板的功夫,才能真正 ...
- Java SE 6 新特性: 对脚本语言的支持
2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...
- Android 翻页效果 电子书
转载请注明来自: 5进制空间-android区 相信做电子书的同学,都遇到过翻页动画的需求吧,如果你不满足与点击滑动翻页的话,这边文章应该能够帮助到你. 先上个效果图: 效果还是很不错的,不过与ibo ...