iOS原生api post上传图片,上传视频
2016-06-15 16:53
579 查看
我之前在做文件上传的时候,不想用第三方的,于是就写了一个简单的图片上传方法
------------.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];
}
}];
------------.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];
}
}];
相关文章推荐
- 买视频送图书-五月活动
- DVI 视频接口图文解析
- C#实现语音视频录制-附demo源码
- 编写C++程序使DirectShow进行视频捕捉
- AnyChat的视频会议程序实例详解
- php修改上传图片尺寸的方法
- C#调用mmpeg进行各种视频转换的类实例
- 为ckeditor编辑器加上传图片的功能
- C#获取视频某一帧的缩略图的方法
- 上传图片时JS自动显示图片
- 基于jQuery的网页影音播放器jPlayer的基本使用教程
- TinyMCE汉化及本地上传图片功能实例详解
- 基于Jquery插件Uploadify实现实时显示进度条上传图片
- ASP.NET实现上传图片并生成缩略图的方法
- Android获取SD卡中选中图片的路径(URL)示例
- codeigniter教程之上传视频并使用ffmpeg转flv示例
- ASP.Net 上传图片并生成高清晰缩略图
- 显示youtube视频缩略图和Vimeo视频缩略图代码分享
- FileUpload上传图片(图片不变形)
- 简单PHP上传图片、删除图片实现代码