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

/**
* 文件上传 导入 #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罗的更多相关文章

  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. java -jar 指定logback.xml、application.yaml

    java -jar 指定logback.xml -Dlogging.config="C:\logbacs\logback.xml" 示例:java -jar   -Dlogging ...

  2. CSS基础 实战案例 模拟小米官方导航栏

    效果图 html结构 <ul> <li><a href="#">Xiaomi手机</a></li> <li> ...

  3. mutation中修改state中的状态值,却报[vuex] do not mutate vuex store state outside mutation handlers.

    网上百度说是在mutation外修改state中的状态值,会报下列错误,可我明明在mutations中修改的状态值,还是报错 接着百度,看到和我类似的问题,说mutations中只能用同步代码,异步用 ...

  4. win10 防火墙配置 允许局域网其他设备访问本地工程

    1.进入防护墙并找到高级设置 2.选择属性 3.将入站连接设为允许,有三个别忘了,[域配置文件,专用配置文件,公用配置文件]

  5. nuxt 项目安装及环境配置

    babel篇 在package.json中添加--exec babel-node 如果需要编译es6,我们需要设置presets包含es2015,也就是预先加载es6编译的模块. 如果需要编译es7, ...

  6. Jmeter中用例禁用

    1.在线程组下创建2个http请求(blogs和baidu),并且在Thread Group 添加[View Results Tree]和[View Results in Table] 2.选择[ba ...

  7. MySQL提权之udf提权(无webshell的情况)

    0x00 介绍 本篇我们来讲无webshell时利用udf进行提权 0x01 前提 1. 必须是root权限(主要是得创建和抛弃自定义函数) 2. secure_file_priv=(未写路径) 3. ...

  8. 2021最新Termux安装Metasploit

    前言 因为某些脚本小子的用Termux搞破坏,所以Termux软件源移除了对Metasploit的支持,所以就不能直接用pkg和apt直接安装了. 但是不用担心,noob-hacker大大写了一个工具 ...

  9. [源码分析] Facebook如何训练超大模型 --- (2)

    [源码分析] Facebook如何训练超大模型 --- (2) 目录 [源码分析] Facebook如何训练超大模型 --- (2) 0x00 摘要 0x01 回顾 1.1 ZeRO 1.1.1 Ze ...

  10. 【发布开源代码】铁威马NAS存储上实现的视频文件浏览

    具体介绍请看:https://github.com/ahfuzhang/tnas_video_web x86机器的windows/linux/mac机器应该都能使用 效果如下: 按月浏览视频 视频太多 ...