iOS上传数据到服务器

作者: yyMae | 来源:发表于2016-01-26 14:39 被阅读4194次

前言

iOS7以后,NSURLSession兴起,其强大与方便远胜于NSURLConnection

本文主要介绍使用NSURLSessionUploadTask上传数据或图片

废话少说直接上代码
//上传数据
- (void)uploadData{
NSURLSession *session = [NSURLSession sharedSession];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"接口地址"]];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPMethod:@"POST"];
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
[request setTimeoutInterval:20];
NSDictionary * dataDic = @{@"key":@"value"};//把要上传的数据存到字典中
NSData * data = [NSJSONSerialization dataWithJSONObject:dataDic
options:NSJSONWritingPrettyPrinted
error:nil];
NSURLSessionUploadTask * uploadTask = [session uploadTaskWithRequest:request fromData:data completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (!error) {
//NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
}else{
NSLog(@"上传失败");
}
}];
[uploadTask resume];
}
//上传图片
- (void)uploadImage{
NSURLSession *session = [NSURLSession sharedSession];
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"接口"]];
[request addValue:@"image/jpeg" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"text/html" forHTTPHeaderField:@"Accept"];
[request setHTTPMethod:@"POST"];
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
[request setTimeoutInterval:20];
NSData * imageData = UIImageJPEGRepresentation(要上传的image,1.0);
NSURLSessionUploadTask * uploadTask = [session uploadTaskWithRequest:request fromData:imageData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

    }];
    [uploadTask resume];
}

总结

结合上面两个方法可知,上传平常的数据和上传图片不一样的地方就是下面这两行代码了,就是在发送POST请求时,请求头里面记录着要上传的是图片还是一般的数据.
上传一般的数据:
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
上传图片:
[request addValue:@"image/jpeg" forHTTPHeaderField:@"Content-Type"]; [request addValue:@"text/html" forHTTPHeaderField:@"Accept"];

相关文章

网友评论

  • 吉s她Hmm:请求一个问题啊 j son请求的怎么上传?
  • Yanni_L:你的图片上传需要添加一个参数
    [request addValue:@"Application/Json" forHTTPHeaderField:@"Accept"];
    否则会返回406
  • Yanni_L:博主, 怎么成功不了
  • 34e7190e77f7:demo 能不能给一下
  • 大墙66370:
    下面的参数不是字符串吗?不需要加"双引号吗"? 这参数能细说一下神马意思吗
    @Application/json
    大墙66370:@大墙66370 谢谢回复
    yyMae:@大墙66370 需要加双引号,多谢指出,已更正.这些参数是你上传服务器的时候服务器所需要的,写在http header,根据你上传数据的类型的不同,content-type对应不同的value,http content-type对照表网上可以查到
  • 冷了年度:坚持
    yyMae:@祈求ios码神 一起加油 :+1:

本文标题:iOS上传数据到服务器

本文链接:https://www.haomeiwen.com/subject/vtsdkttx.html