您的位置:首页 > 移动开发 > IOS开发

iOS中使用POST向服务器发送图片文件

2016-03-04 20:30 453 查看
#pragma mark -使用POST上传图片-
//parmater:上传的参数    data:图片数据  name:保存后的文件名
-(void)sendPost2:(NSString *)urlStr parmater:(NSDictionary *)parm data:(NSData*)data name:(NSString *)fileName{

//初始化要上传的数据
NSMutableData *dataM = [NSMutableData data];

//准备工作(规定好了的格式),事先规定好分隔符TEST_FORM_BOUNDARY
NSString *strTop=[NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"file\"; filename=\"%@\"\r\nContent-Type: %@\r\n",TEST_FORM_BOUNDARY,fileName,@"image/png"];
NSLog(@"%@",strTop);

[dataM appendData:BXEncode(strTop)];
[dataM appendData:BXEncode(@"\r\n")];
[dataM appendData:data];
[dataM appendData:BXEncode(@"\r\n")];

//遍历一遍字典参数,用block形式执行,会自动分配到多核cpu上运行
[parm enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {

//参数开始的标志
NSString *boundry = [NSString stringWithFormat:@"--%@\r\n",TEST_FORM_BOUNDARY];
[dataM appendData:BXEncode(boundry)];

NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n", key];

[dataM appendData:BXEncode(disposition)];
[dataM appendData:BXEncode(@"\r\n")];
[dataM appendData:BXEncode(obj)];
[dataM appendData:BXEncode(@"\r\n")];
}];

//尾部的分隔符
NSString *strBottom = [NSString stringWithFormat:@"--%@--\r\n",TEST_FORM_BOUNDARY];

[dataM appendData:BXEncode(strBottom)];

//请求设置
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:dataM];

//设置上传数据的长度及格式
[request setValue:[NSString stringWithFormat:@"%lu",(unsigned long)dataM.length] forHTTPHeaderField:@"Content-Length"];

[request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",TEST_FORM_BOUNDARY] forHTTPHeaderField:@"Content-Type"];

//上传
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromData:dataM completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (!error && data) {
NSLog(@"response:%@",response);
NSLog(@"data:%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
}else{
NSLog(@"error:%@",error);
}
}];
[task resume];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: