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 ...
随机推荐
- SpringBoot集成Actuator健康指示器health
1.说明 本文详细介绍Actuator提供的HealthIndicators, 即健康指示器的配置使用, 利用自动配置的健康指标, 检查正在运行的应用程序的状态, 以及自定义健康指标的方法. 监控软件 ...
- .net core使用rabbitmq消息队列 (二)
之前有写过.net core集成使用rabbitmq的博文,见.net core使用rabbitmq消息队列,但是里面的使用很简单,而且还有几个bug,想改下,但是后来想了想,还是算了,之前使用的是. ...
- C#中CancellationToken和CancellationTokenSource用法
之前做开发时,一直没注意这个东西,做了.net core之后,发现CancellationToken用的越来越平凡了. 这也难怪,原来.net framework使用异步的不是很多,而.net cor ...
- 造轮子-strace(二)实现
这一篇文章会介绍strace如何工作,再稍微深入介绍一下什么是system call.再介绍一下ptrace.wait(strace依赖的system call).最后再一起来造个轮子,动手用代码实现 ...
- Android8 以上使用 UIautomator Viewer提示Unexpected error while obtaining UI hierarchy报错(方法二)
一:最常见的一个问题就是:Android8及以上的系统无法获取到页面,提示报下面的错误 二:解决办法 1.下载新的tools,在下面链接里找到SDK tools下载 http://www.androi ...
- unittest_expectedFailure预期用例失败(5)
在断言用例执行结果时,会出现预期结果与实际结果不一致的情况,此时我们明确知道用例执行结果为FAIL,不想看到打印错误信息怎么办? 使用装饰器@unittest.expectedFailure标记该用例 ...
- [ python应用 ] python递归搜索文件,支持搜索多个文件,支持自定义处理动作
写了一个PyQT界面的版本:https://github.com/LongchuanYu/pyqt_project PATH = r'E:\MyDocument\新しいフォルダー\' # 要搜索的目录 ...
- [Flask] Flask问题集(后端模板渲染项目)
1.redirect和render_template的区别? redirect:重定向,会改变url render_template:模板渲染,用模板来渲染当前页,不会改变url 2.关于 'g' 对 ...
- SSM工程常见问题
1.引入Junit测试 <!--引入junit单元测试,两个一起引用,spring-test版本要与Spring-core保持一致--> <dependency> <gr ...
- vue-cli axios封装(element-ui)
1.http.js /** * * http配置 */ import axios from 'axios'import { Loading, Message } from 'element-ui' / ...