AFNetWorking 文件上传 By-H罗
一.文件上传(图片,音频,视频,文本等)(不带进度)
/**
* 文件上传 导入 #import "AFNetworking.h"
* @param filePath 上传文件本地路径
*/
-(void)uploadfile:(NSString *)filePath
{
//服务器所需参数(根据服务器需要设置)
NSMutableDictionary *params=[NSMutableDictionary dictionary];
[params setObject:@"0" forKey:@"uptype"]; //0-表单上传 1-字节流上传
[params setObject:@"VEJQemdPdDd6ZEdhYWY1" forKey:@"key"]; NSData *fileData=[NSData dataWithContentsOfFile:filePath]; //二进制数据
NSString *fileName=[filePath lastPathComponent]; //文件名
NSString *mimeType=[self getMIMEType:filePath]; //文件类型 if (!mimeType) {
mimeType = @"application/octet-stream"; //不知道文件类型
}
AFHTTPRequestOperationManager *requestManager = [AFHTTPRequestOperationManager manager];
requestManager.responseSerializer = [AFHTTPResponseSerializer serializer];//这个有时必须设置
requestManager.requestSerializer.timeoutInterval=45.f;//请求超时45S
[requestManager POST:@"http://218.107.2.205:8080/mage/upload/file/save?" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:fileData name:@"file" fileName:fileName mimeType:mimeType];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
//系统自带JSON解析
NSDictionary *resultJsonDic = [NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"上传成功resultJsonDic-%@",resultJsonDic);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"上传失败Error-%@",error);
}];
}
二.文件上传(带上传进度)
/**
* 功能 AFNetWorking带进度指示文件上传
* @param filePath 文件路径
*/
-(void)uploadfile:(NSString *)filePath
{
//服务器所需参数(非必须)
NSMutableDictionary *params=[NSMutableDictionary dictionary];
[params setObject:@"0" forKey:@"uptype"]; //0-表单上传 1-字节流上传
[params setObject:@"VEJQemdPdDd6ZEdhYWY1" forKey:@"key"]; NSData *fileData=[NSData dataWithContentsOfFile:filePath]; //二进制数据
NSString *fileName=[filePath lastPathComponent]; //文件名
NSString *mimeType=[self getMIMEType:filePath]; //文件类型 if (!mimeType) {
mimeType = @"application/octet-stream";
} AFHTTPRequestOperationManager *requestManager = [AFHTTPRequestOperationManager manager];
requestManager.responseSerializer = [AFHTTPResponseSerializer serializer];
requestManager.requestSerializer.timeoutInterval=15.f;//请求超时45S NSMutableURLRequest *request = [requestManager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:SBUploadFileurl parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:fileData name:@"file" fileName:fileName mimeType:mimeType];
} error:nil]; AFHTTPRequestOperation *operation = [requestManager HTTPRequestOperationWithRequest:request
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// //系统自带JSON解析
NSDictionary *resultJsonDic = [NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"上传成功--%@",resultJsonDic);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"失败--%@",error);
}]; [operation setUploadProgressBlock: ^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
float progress=(float)totalBytesWritten / totalBytesExpectedToWrite;
NSLog(@"上传进度 = %f",progress);
}]; [request setTimeoutInterval:25.0f];
[requestManager.operationQueue addOperation:operation]; }
获取上传文件类型
http://tool.oschina.net/commons 上传文件类型mimeType对照表
/**
* 功能 获取文件类型 方式一
* @param path 文件路径
* @return MIMEType
*/
-(NSString*)getMIMEType:(NSString *)path
{
NSError *error;
NSURLResponse*response;
NSURLRequest*request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]];
[NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
return [response MIMEType];
} /**
* 获取MIMEType方式二
*/
- (NSString*) getMIMEType2: (NSString *) path
{
if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
return nil;
}
// Borrowed from http://stackoverflow.com/questions/5996797/determine-mime-type-of-nsdata-loaded-from-a-file
// itself, derived from http://stackoverflow.com/questions/2439020/wheres-the-iphone-mime-type-database
CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[path pathExtension], NULL);
CFStringRef mimeType = UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType);
CFRelease(UTI);
if (!mimeType) {
return @"application/octet-stream";
}
return (__bridge NSString *)mimeType;
}
AFNetWorking 文件上传 By-H罗的更多相关文章
- AFNetworking 文件上传Data,File图片,文件等上传
一:AFNetworking的文件上传: 主要几个以下类似 - (BOOL)appendPartWithFileURL:(NSURL *)fileURL name:(NSString *)name e ...
- iOS开发系列-文件上传
概述 Http协议对文件上传协议要求的 1. 必须设置请求头Content-Type为multipart/form-data.在iOS中后面需要跟上分隔符比如:boundary=----WebKitF ...
- iOS-利用AFNetworking(AFN 1.x)-实现文件上传
转:http://www.kaifazhe.com/ios_school/380067.html 官方建议AFN的使用方法 1. 定义一个全局的AFHttpClient:包含有 1> baseU ...
- iOS- 利用AFNetworking(AFN) - 实现文件上传
官方建议AFN的使用方法 1. 定义一个全局的AFHttpClient:包含有 1> baseURL 2> 请求 3> 操作队列 NSOperationQueue 2. 由AFHTT ...
- NSURLConnection实现文件上传和AFNetworking实现文件上传
请求的步骤分为4步 1.创建请求 2.设置请求头(告诉服务器这是一个文件上传的请求) 3.设置请求体 4.发送请求 NSURLConnection实现文件上传 // 1.创建请求 NSURL *url ...
- iOS分享 - AFNetworking之多图片/文件上传
在分享经验之前,先说点题外话,之前的一个项目涉及到了多图片的上传,本来以为是一个很简单的事情,却着实困扰了我好久,究其原因,一是我不够细心,二是与后台人员的交流不够充分.在此,我想将我的老师常说的一句 ...
- AFNetworking之多图片-文件上传
在分享经验之前,先说点题外话,之前的一个项目涉及到了多图片的上传,本来以为是一个很简单的事情,却着实困扰了我好久,究其原因,一是我不够细心,二是与后台人员的交流不够充分.在此,我想将我的老师常说的一句 ...
- iOS开发-AFNetworking参数和多文件同时上传【多文件上传】
1. 前言 在项目开发中,我们经常需要上传文件,例如:上传图片,上传各种文件,而有时也需要将参数和多个文件一起上传,不知道大家的项目中遇到了没有,我在最近的项目中,就需要这样的一个功能:同时上传参数. ...
- iOS开发之AFNetworking实现数据传输和文件上传
//传输数据 1 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.r ...
随机推荐
- 美和易思 - JAVA开发&移动互联网 阶段性教学效果检测考试机试试题【题目:维护洗衣店消费项数据】
一. 语言和环境 1. 实现语言:Java 语言. 2. 环境要求:Eclipse 或 Myeclipse+MySQL. 二. 功能需求 利用 Java Swing 和 JDBC 技术维护洗衣店消费项 ...
- STM32零基础入门教程
本文主要是针对想了解STM32,手里又没有太多预算的小伙伴.市场上针对新手来说,比较合适的STM32开发版太贵,比如正点原子.树莓派等,便宜的教程又不详细,这对想白嫖的小伙伴来说不太有好,所以我选了一 ...
- MySQL启用SSL连接
1.手动创建自认证证书 1.1 创建CA证书 openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -days 3600 ...
- MySQL数据库安装Version5.7
MySQL数据库版本: mysql-5.7.22-linux-glibc2.12-x86_64 Linux服务器系统: CentOS 7.4 64bit MySQL安装用户: mysql/aliyun ...
- django后台admin页面表单自定义
自定义一个form 表单来替换admin默认的表单 在自定义表单中可以定义字段和验证 https://docs.djangoproject.com/zh-hans/3.2/ref/contrib/ad ...
- xshell 所选的用户密钥未在远程主机上注册;无法加载密钥
他山之石 https://zhuanlan.zhihu.com/p/92528287 安全起见,服务器最近的安全策略准备进行更改,逐渐由原来的密码登录更换为密钥登录认证. 于是今天把服务器上的id_r ...
- Java语言学习案例雷霆战机
1.Java雷霆战机学习笔记(一)-资源加载 https://www.toutiao.com/i6631331313259381255/ 2.Java雷霆战机学习笔记(二)-音乐播放 https:// ...
- HDURomantic
Problem - 1004 (hdu.edu.cn) 扩展欧几里得解决线性同余方程.先得到gcd的解,再恢复原解,因为知道通解的一般形式,所以通过模来得到最小正整数解.另一个可以通过相减,或者一样的 ...
- HDU-1004(C语言描述)
Let the Balloon Rise 输入 输入包含多个测试用例.每个测试用例都以数字 N (0 < N < = 1000) 为起点, 分布的气球总数.下 N 行包含一个颜色.气球的颜 ...
- HIVE执行引擎TEZ学习以及实际使用
概述 最近公司在使用Tez,今天写一篇关于Tez的学习和使用随笔.Tez是Apache最新的支持DAG作业的开源计算框架,它可以将多个有依赖的作业转换为一个作业从而大幅提升DAG作业的性能.Tez并不 ...