我之前在做文件上传的时候,不想用第三方的,于是就写了一个简单的图片上传方法
------------.h文件里面写一个这样方法-------
/**
* 异步上传文件,视频,图片
*
* @param name 名字 这个名字是和后台协定好的关键字
* @param filename 上传文件的名字
* @param mimeType 上传文件类型
* @param data 文件流数据
* @param upurl 上传路径
* @param params 上传参数
* @param complete block回调NSDictionary类型
*/
+(void)upload:(NSString *)name filename:(NSString *)filename mimeType:(NSString *)mimeType data:(NSData *)data upUrl:(NSString *)upurl parmas:(NSDictionary *)params complete:(void(^)(NSDictionary *dict))complete;
------------.m文件里面实现这个这样方法-------
#define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]
+(void)upload:(NSString *)name filename:(NSString *)filename mimeType:(NSString*)mimeType data:(NSData *)data upUrl:(NSString *)upurl parmas:(NSDictionary *)params complete:(void(^)(NSDictionary *dict))complete;{
NSLog(@"开始上传===================");
// 文件上传
NSURL *url = [NSURLURLWithString:upurl];
NSLog(@"地址===========%@%@",upurl,params);
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:url];
request.HTTPMethod =@"POST";
// 设置请求体
NSMutableData *body = [NSMutableDatadata];
/***************文件参数***************/
// 参数开始的标志
[bodyappendData:YYEncode(@"--YY\r\n")];
// name : 指定参数名(必须跟服务器端保持一致)
// filename : 文件名
NSString *disposition = [NSStringstringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", name, filename];
[bodyappendData:YYEncode(disposition)];
NSString *type = [NSStringstringWithFormat:@"Content-Type: %@\r\n", mimeType];
[bodyappendData:YYEncode(type)];
[bodyappendData:YYEncode(@"\r\n")];
[bodyappendData:data];
[bodyappendData:YYEncode(@"\r\n")];
/***************普通参数***************/
[paramsenumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop) {
// 参数开始的标志
[bodyappendData:YYEncode(@"--YY\r\n")];
NSString *disposition = [NSStringstringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n", key];
[bodyappendData:YYEncode(disposition)];
[bodyappendData:YYEncode(@"\r\n")];
[bodyappendData:YYEncode(obj)];
[bodyappendData:YYEncode(@"\r\n")];
}];
/***************参数结束***************/
// YY--\r\n
[bodyappendData:YYEncode(@"--YY--\r\n")];
request.HTTPBody = body;
// 设置请求头
// 请求体的长度
[request setValue:[NSStringstringWithFormat:@"%zd", body.length]forHTTPHeaderField:@"Content-Length"];
//声明这个POST请求是个文件上传
[request setValue:@"multipart/form-data; boundary=YY"forHTTPHeaderField:@"Content-Type"];
// 发送请求
[NSURLConnectionsendAsynchronousRequest:requestqueue:[NSOperationQueuemainQueue]completionHandler:^(NSURLResponse *response,NSData *data,NSError *connectionError) {
if (data) {
NSDictionary *dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingMutableLeaveserror:nil];
NSLog(@"-----------------%@", dict);
NSLog(@"上传成功");
complete(dict);
}else {
NSLog(@"上传失败");
}
}];
}
-----------这个方法的使用----------------------
NSMutableDictionary *param = [[NSMutableDictionaryalloc]init];//参数字典
//下面五个是参数,根据实际情况而定
[param setValue:dep forKey:@"description"];
[param setValue:_gpsString forKey:@"addr"];
NSLog(@"gpsstring==========%@",_gpsString);
[param setValue:_circleid forKey:@"circleId"];
[param setValue:userId forKey:@"userId"];
[param setValue:phoneNumber forKey:@"phoneNumber"];
NSString *name=@"userImg";//这个名字和后台商量好了
NSString *filename=@"images.jpg";//上传后的名字
NSString *mimeType=@"image/jpeg";//上传类型
NSString *upurl=[NSString stringWithFormat:@"%@/%@",IP,UPDATA_USER_HEAD_IMG];
//上传路径,你们自己的路径
NSData *data = [NSData dataWithContentsOfFile:fullPath];//data数据流,图片的路径
/*
如果是上传视频的话
NSData *data = [NSData dataWithContentsOfFile:fullPath];
//data数据流fullPath就是保存视频的路径
NSString *name=@"fileVideo";(和后台保持一致)
NSString *filename=@"videos.mp4";
NSString *mimeType=@"video/mp4";//(视频和图片的格式有多种,这里就不举例了)
*/
//下面是上传方法
[Upload upload:namefilename:filenamemimeType:mimeTypedata:dataupUrl:upurlparmas:paramcomplete:^(NSDictionary *dict) {
if ([[dictobjectForKey:@"status"]isEqualToString:@"0"]) {
NSLog(@"上传头像成功");
NSString * userImg=[dictobjectForKey:@"userImg"];
[appDelegate.appDefaultsetObject:userImgforKey:@"imgPath"];
//创建通知
NSNotification *notification =[NSNotificationnotificationWithName:@"updateHeadImgtongzhi"object:niluserInfo:nil];
//通过通知中心发送通知
[[NSNotificationCenterdefaultCenter]postNotification:notification];
}
}];