一.文件上传(图片,音频,视频,文本等)(不带进度)

  1. /**
  2. * 文件上传 导入 #import "AFNetworking.h"
  3. * @param filePath 上传文件本地路径
  4. */
  5. -(void)uploadfile:(NSString *)filePath
  6. {
  7. //服务器所需参数(根据服务器需要设置)
  8. NSMutableDictionary *params=[NSMutableDictionary dictionary];
  9. [params setObject:@"0" forKey:@"uptype"]; //0-表单上传 1-字节流上传
  10. [params setObject:@"VEJQemdPdDd6ZEdhYWY1" forKey:@"key"];
  11.  
  12. NSData *fileData=[NSData dataWithContentsOfFile:filePath]; //二进制数据
  13. NSString *fileName=[filePath lastPathComponent]; //文件名
  14. NSString *mimeType=[self getMIMEType:filePath]; //文件类型
  15.  
  16. if (!mimeType) {
  17. mimeType = @"application/octet-stream"; //不知道文件类型
  18. }
  19. AFHTTPRequestOperationManager *requestManager = [AFHTTPRequestOperationManager manager];
  20. requestManager.responseSerializer = [AFHTTPResponseSerializer serializer];//这个有时必须设置
  21. requestManager.requestSerializer.timeoutInterval=45.f;//请求超时45S
  22. [requestManager POST:@"http://218.107.2.205:8080/mage/upload/file/save?" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
  23. [formData appendPartWithFileData:fileData name:@"file" fileName:fileName mimeType:mimeType];
  24. } success:^(AFHTTPRequestOperation *operation, id responseObject) {
  25. //系统自带JSON解析
  26. NSDictionary *resultJsonDic = [NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingMutableLeaves error:nil];
  27. NSLog(@"上传成功resultJsonDic-%@",resultJsonDic);
  28. } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  29.  
  30. NSLog(@"上传失败Error-%@",error);
  31. }];
  32. }

二.文件上传(带上传进度)

  1. /**
  2. * 功能 AFNetWorking带进度指示文件上传
  3. * @param filePath 文件路径
  4. */
  5. -(void)uploadfile:(NSString *)filePath
  6. {
  7. //服务器所需参数(非必须)
  8. NSMutableDictionary *params=[NSMutableDictionary dictionary];
  9. [params setObject:@"0" forKey:@"uptype"]; //0-表单上传 1-字节流上传
  10. [params setObject:@"VEJQemdPdDd6ZEdhYWY1" forKey:@"key"];
  11.  
  12. NSData *fileData=[NSData dataWithContentsOfFile:filePath]; //二进制数据
  13. NSString *fileName=[filePath lastPathComponent]; //文件名
  14. NSString *mimeType=[self getMIMEType:filePath]; //文件类型
  15.  
  16. if (!mimeType) {
  17. mimeType = @"application/octet-stream";
  18. }
  19.  
  20. AFHTTPRequestOperationManager *requestManager = [AFHTTPRequestOperationManager manager];
  21. requestManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  22. requestManager.requestSerializer.timeoutInterval=15.f;//请求超时45S
  23.  
  24. NSMutableURLRequest *request = [requestManager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:SBUploadFileurl parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
  25. [formData appendPartWithFileData:fileData name:@"file" fileName:fileName mimeType:mimeType];
  26. } error:nil];
  27.  
  28. AFHTTPRequestOperation *operation = [requestManager HTTPRequestOperationWithRequest:request
  29. success:^(AFHTTPRequestOperation *operation, id responseObject) {
  30. // //系统自带JSON解析
  31. NSDictionary *resultJsonDic = [NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingMutableLeaves error:nil];
  32. NSLog(@"上传成功--%@",resultJsonDic);
  33. } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  34. NSLog(@"失败--%@",error);
  35. }];
  36.  
  37. [operation setUploadProgressBlock: ^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
  38. float progress=(float)totalBytesWritten / totalBytesExpectedToWrite;
  39. NSLog(@"上传进度 = %f",progress);
  40. }];
  41.  
  42. [request setTimeoutInterval:25.0f];
  43. [requestManager.operationQueue addOperation:operation];
  44.  
  45. }

获取上传文件类型 

http://tool.oschina.net/commons   上传文件类型mimeType对照表

  1. /**
  2. * 功能 获取文件类型 方式一
  3. * @param path 文件路径
  4. * @return MIMEType
  5. */
  6. -(NSString*)getMIMEType:(NSString *)path
  7. {
  8. NSError *error;
  9. NSURLResponse*response;
  10. NSURLRequest*request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]];
  11. [NSURLConnection sendSynchronousRequest:request
  12. returningResponse:&response
  13. error:&error];
  14. return [response MIMEType];
  15. }
  16.  
  17. /**
  18. * 获取MIMEType方式二
  19. */
  20. - (NSString*) getMIMEType2: (NSString *) path
  21. {
  22. if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
  23. return nil;
  24. }
  25. // Borrowed from http://stackoverflow.com/questions/5996797/determine-mime-type-of-nsdata-loaded-from-a-file
  26. // itself, derived from http://stackoverflow.com/questions/2439020/wheres-the-iphone-mime-type-database
  27. CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[path pathExtension], NULL);
  28. CFStringRef mimeType = UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType);
  29. CFRelease(UTI);
  30. if (!mimeType) {
  31. return @"application/octet-stream";
  32. }
  33. return (__bridge NSString *)mimeType;
  34. }
 
 
 
 
 
 

AFNetWorking 文件上传 By-H罗的更多相关文章

  1. AFNetworking 文件上传Data,File图片,文件等上传

    一:AFNetworking的文件上传: 主要几个以下类似 - (BOOL)appendPartWithFileURL:(NSURL *)fileURL name:(NSString *)name e ...

  2. iOS开发系列-文件上传

    概述 Http协议对文件上传协议要求的 1. 必须设置请求头Content-Type为multipart/form-data.在iOS中后面需要跟上分隔符比如:boundary=----WebKitF ...

  3. iOS-利用AFNetworking(AFN 1.x)-实现文件上传

    转:http://www.kaifazhe.com/ios_school/380067.html 官方建议AFN的使用方法 1. 定义一个全局的AFHttpClient:包含有 1> baseU ...

  4. iOS- 利用AFNetworking(AFN) - 实现文件上传

    官方建议AFN的使用方法 1. 定义一个全局的AFHttpClient:包含有 1> baseURL 2> 请求 3> 操作队列 NSOperationQueue 2. 由AFHTT ...

  5. NSURLConnection实现文件上传和AFNetworking实现文件上传

    请求的步骤分为4步 1.创建请求 2.设置请求头(告诉服务器这是一个文件上传的请求) 3.设置请求体 4.发送请求 NSURLConnection实现文件上传 // 1.创建请求 NSURL *url ...

  6. iOS分享 - AFNetworking之多图片/文件上传

    在分享经验之前,先说点题外话,之前的一个项目涉及到了多图片的上传,本来以为是一个很简单的事情,却着实困扰了我好久,究其原因,一是我不够细心,二是与后台人员的交流不够充分.在此,我想将我的老师常说的一句 ...

  7. AFNetworking之多图片-文件上传

    在分享经验之前,先说点题外话,之前的一个项目涉及到了多图片的上传,本来以为是一个很简单的事情,却着实困扰了我好久,究其原因,一是我不够细心,二是与后台人员的交流不够充分.在此,我想将我的老师常说的一句 ...

  8. iOS开发-AFNetworking参数和多文件同时上传【多文件上传】

    1. 前言 在项目开发中,我们经常需要上传文件,例如:上传图片,上传各种文件,而有时也需要将参数和多个文件一起上传,不知道大家的项目中遇到了没有,我在最近的项目中,就需要这样的一个功能:同时上传参数. ...

  9. iOS开发之AFNetworking实现数据传输和文件上传

    //传输数据 1 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.r ...

随机推荐

  1. Win10 开启 Hyper-V 及简单使用

    简介 Windows 10 上内置了 Hyper-V.Hyper-V 提供硬件虚拟化,每个虚拟机都在虚拟硬件上运行. 系统要求 Windows 10 企业版.专业版或教育版.家庭版.移动版.移动企业版 ...

  2. python 数据库查询,将查询的列名也保存下来,返回字典类型的数据

    前言: python + pymysql:通过pymysql,查询到符合要求的数据,不做类型转化的,返回的时元组类型的数据,可以根据下标,取想要的值. self.cursor.execute(sql) ...

  3. Redis_安装配置(2)

    一.安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 $ yum install -y gcc 上面命令 ...

  4. Nginx 加载conf.d (内文件***.conf)

    include /usr/local/nginx/conf/conf.d/*.conf;

  5. Oracle 五种约束的创建和移除:

    1.主键约束: 创建表的时候就添加: create table table_name (categoryId varchar2(10), categoryName varchar2(30), prim ...

  6. 在CentOS7上安装 jq

    安装EPEL源: yum install epel-release 安装完EPEL源后,可以查看下jq包是否存在: yum list jq 安装jq: yum -y install jq 命令参考资料 ...

  7. react中create-react-app详情配置文档

    https://facebook.github.io/create-react-app/docs/documentation-intro

  8. Linux上天之路系列目录

    Linux上天之路系列目录 Linux上天之路(一)之Linux前世今生 Linux上天之路(二)之Linux安装 Linux上天之路(三)之Linux系统目录 Linux上天之路(四)之Linux界 ...

  9. mongodb基础整理篇————常规操作[二]

    前言 简单整理一下常规操作. 正文 虽然一般说写代码看的是思想,但是呢,如果不知道mongodb 有哪些常用的操作,那么你怎么能知道mongodb是否符合你的需求,比如说如果聚合功能都没有,你得自己写 ...

  10. 360浏览器兼容模式下jsp页面访问不到js文件

    360浏览器兼容模式下jsp页面访问不到js文件 查看自己js中的语法问题,不要用ES6的语法,编译不了故找不到js文件 const var of 码出高效 java 比较 所有整型包装类对象之间值的 ...