[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 ...
随机推荐
- Python错误处理
中文注释出错,把UTF-8标明放在文件头就行了 # coding: utf-8
- NGUI监听事件
using UnityEngine; using System.Collections; public class UIDataHandler : MonoBehaviour { public UII ...
- 代码实现获取log日志和logcat使用方法
代码实现获取log日志new Thread(new Runnable() { @Override publi ...
- LA 5059 (找规律 SG函数) Playing With Stones
题意: 有n堆石子,两个人轮流取,每次只能取一堆的至少一个至多一半石子,直到不能取为止. 判断先手是否必胜. 分析: 本题的关键就是求SG函数,可是直接分析又不太好分析,于是乎找规律. 经过一番“巧妙 ...
- HDU 1710 Binary Tree Traversals
题意:给出一颗二叉树的前序遍历和中序遍历,输出其后续遍历 首先知道中序遍历是左子树根右子树递归遍历的,所以只要找到根节点,就能够拆分出左右子树 前序遍历是按照根左子树右子树递归遍历的,那么可以找出这颗 ...
- Liunx常用的特殊环境变量
[weiqiang.liu@l~]$ sh variable xiaoqiang xiaoxuenumber:2scname:variablefirst:xiaoqiangsecond:xiaoxue ...
- Java [Leetcode 168]Excel Sheet Column Title
题目描述: Given a positive integer, return its corresponding column title as appear in an Excel sheet. F ...
- 【C#学习笔记】检测进程是否存在并关闭
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 两个android程序间的相互调用(apk互调)
通常我们用到的只是activity之间的互相跳转和调用,很少会用到apk级别的互相调用. 往往在一些应用上会用到,比如一个支付系统,可能会有很多的一系列的程序调用到:彩票系统.订票系统.团购网……全部 ...
- codeforces 700C Break Up 暴力枚举边+边双缩点(有重边)
题意:n个点,m条无向边,每个边有权值,给你 s 和 t,问你至多删除两条边,让s,t不连通,问方案的权值和最小为多少,并且输出删的边 分析:n<=1000,m是30000 s,t有4种情况( ...