iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件上传
来源:互联网 发布:阿里云快照服务是什么 编辑:程序博客网 时间:2024/06/05 10:51
0.导入框架准备工作
•1. 将AFNetworking3.0+框架程序拖拽进项目
•2. 或使用Cocopod 导入AFNetworking3.0+
•3. 引入
#import "AFNetworking.h"
1.UI准备工作
1
2
3
4
5
6
7
8
9
10
11
//.h文件
#import <UIKit/UIKit.h>
@
interface
ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
//上传进度条
@property (weak, nonatomic) IBOutlet UIProgressView *progressView;
@end
2.利用AFN实现文件上传操作细节
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
- (
void
)uploadImage{
/*
此段代码如果需要修改,可以调整的位置
1. 把upload.php改成网站开发人员告知的地址
2. 把file改成网站开发人员告知的字段名
*/
//AFN3.0+基于封住HTPPSession的句柄
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSDictionary *dict = @{
@"username"
:
@"Saup"
};
//formData: 专门用于拼接需要上传的数据,在此位置生成一个要上传的数据体
[manager POST:
@"http://192.168.1.111:12345/upload.php"
parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
UIImage *image =[UIImage imageNamed:
@"moon"
];
NSData *data = UIImagePNGRepresentation(image);
// 在网络开发中,上传文件时,是文件不允许被覆盖,文件重名
// 要解决此问题,
// 可以在上传时使用当前的系统事件作为文件名
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 设置时间格式
formatter.dateFormat =
@"yyyyMMddHHmmss"
;
NSString *str = [formatter stringFromDate:[NSDate date]];
NSString *fileName = [NSString stringWithFormat:
@"%@.png"
, str];
//上传
/*
此方法参数
1. 要上传的[二进制数据]
2. 对应网站上[upload.php中]处理文件的[字段"file"]
3. 要保存在服务器上的[文件名]
4. 上传文件的[mimeType]
*/
[formData appendPartWithFileData:data name:
@"file"
fileName:fileName mimeType:
@"image/png"
];
} progress:^(NSProgress * _Nonnull uploadProgress) {
//上传进度
// @property int64_t totalUnitCount; 需要下载文件的总大小
// @property int64_t completedUnitCount; 当前已经下载的大小
//
// 给Progress添加监听 KVO
NSLog(
@"%f"
,1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
// 回到主队列刷新UI,用户自定义的进度条
dispatch_async(dispatch_get_main_queue(), ^{
self.progressView.progress = 1.0 *
uploadProgress.completedUnitCount / uploadProgress.totalUnitCount;
});
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(
@"上传成功 %@"
, responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(
@"上传失败 %@"
, error);
}];
}
4.检测网络状态--优化用户体验
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- (
void
)viewDidLoad {
[super viewDidLoad];
//网络监控句柄
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
//要监控网络连接状态,必须要先调用单例的startMonitoring方法
[manager startMonitoring];
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
//status:
//AFNetworkReachabilityStatusUnknown = -1, 未知
//AFNetworkReachabilityStatusNotReachable = 0, 未连接
//AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G
//AFNetworkReachabilityStatusReachableViaWiFi = 2, 无线连接
NSLog(
@"%d"
, status);
}];
}
1 0
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件上传
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载
- iOS- 利用AFNetworking(AFN) - 实现文件上传
- iOS-利用AFNetworking(AFN 1.x)-实现文件上传
- iOS- 利用AFNetworking(AFN) - 实现图片上传 -
- iOS利用AFNetworking(AFN) 实现图片上传
- iOS- 利用AFNetworking(AFN) - 实现图片上传
- iOS- 利用AFNetworking(AFN) - 实现图片上传
- iOS- 利用AFNetworking(AFN) - 实现图片上传
- iOS利用AFNetworking(AFN) 实现图片上传
- iOS利用AFNetworking(AFN) 实现图片上传
- 利用AFN上传文件
- iOS- 利用AFNetworking(AFN) 1.1.0- 实现文件断点下载
- iOS- 利用AFNetworking(AFN) 1.1.0- 实现文件断点下载
- AFNetworking3.0文件/图片上传
- iOS-利用AFNetworking(AFN 1.x)-实现文件断点下载
- iOS- 利用AFNetworking(AFN) - 实现文件断点下载
- Swift-泛型
- JQuery-省市区三级联动
- JAVA 8:健壮、易用的时间/日期API
- 接口回调
- 保护你的服务器不受Heartbleed OpenSSL漏洞的威胁
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件上传
- 落单的数
- iOS - 获取手机中所有图片
- Genymotion 解决虚拟镜像下载速度特别慢的问题
- Docker生态系统:常规组件简介
- 编辑器与IDE
- viewpager滑动背景透明效果渐变(引导界面滑动)
- 设计模式原则杂谈
- Android源代码编译命令m/mm/mmm/make分析