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 ...
随机推荐
- Ubuntu安装Rocksdb并调试
前言 第一次写博客^_^ 系统是全新的Ubuntu20.04,什么都没有,一切从头开始安装 查看gcc和g++版本 sudo apt-get update gcc --version g++ --ve ...
- pytest 一个测试类怎样使用多种fixture前置方法
fixture()方法写在哪里? @pytest.fixture(scope="范围")写在conftest文件中,如下图 怎么使用fixture()呢?分为一个类中使用一个前置或 ...
- unittest_skip跳过用例执行(3)
在执行测试用例时,有时候有些用例是不需要执行的,比如版本迭代用例弃用,测试周期短只需要执行优先级高的用例,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作 ...
- vi中使用鼠标右键插入时进入(insert)visual模式
使用vim插入外面复制的内容时,用右键点击后,并未将内容粘贴进去,而是进入了(insert)visual模式,解决方法:先shift+enter进入普通模式输入 set mouse-=a然后再i进入i ...
- linux 查看历史命令 history命令
1.history命令 "history"命令就是历史记录.它显示了在终端中所执行过的所有命令的历史. history //显示终端执行过的命令 history 10 //显示最近 ...
- 网络协议学习笔记(八)DNS协议和HttpDNS协议
概述 上一篇主要讲解了流媒体协议和p2p协议,现在我给大家讲解一下关于DNS和HttpDNS的相关知识. DNS协议:网络世界的地址簿 在网络世界,也是这样的.你肯定记得住网站的名称,但是很难记住网站 ...
- 读 Linux 像读小说「GitHub 热点速览 v.22.03」
本周特推选取了一个画风有点意思的 Linux 代码带读项目 flash-linux0.11-talk,希望有趣的文风能带你读完 Linux 代码.当然画风可以增加阅读体验,彩色标记也是一种学习方法-- ...
- RBAC: K8s基于角色的权限控制
文章目录 RBAC: K8s基于角色的权限控制 ServiceAccount.Role.RoleBinding Step 1:创建一个ServiceAccount,指定namespace Step 2 ...
- UML 有关类图知识及类间关系
原文链接:https://blog.csdn.net/mj_ww/article/details/53020346 1. 类的含义 类图(Class diagram)显示了系统的静态结构,而系统的静态 ...
- 【C++】字符串处理
字符串处理 标签:c++ 目录 字符串处理 一.输入 1. scanf()函数 2. gets()函数 3. getchar()函数 二.输出 1. printf()函数 2. puts()函数: 3 ...