您的位置:首页 > 其它

苹果原生NSURLSession的上传和下载

2014-03-13 00:02 288 查看
关于NSURLSession的上传和下载

在iOS7.0后,苹果公司新推出了一个NSURLSession来代替NSURLConnection。NSURLConnection默认是在 主线程执行的。而NSURLSession是在其他线程上执行的。本篇主要实现了下载和上传,比起NSURLConnection更加简单。线程控制掌握 更加清晰。

#pragma mark -下载

- (IBAction)upLoad

{

// 0. 判断imageView是否有内容

if (_imageView.image == nil) {

NSLog(@"image view is empty");

return;

}

// 0. 上传之前在界面上添加指示符

UIActivityIndicatorView *indicator = [[UIActivityIndicatorViewalloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];

// 设置位置???

CGSize size = _imageView.bounds.size;

indicator.center = CGPointMake(size.width / 2.0, size.height / 2.0);

[self.imageView addSubview:indicator];

[indicator startAnimating];

// 1. URL

NSString *urlStr = @"http://192.168.3.251/uploads/123.jpg";

NSURL *url = [NSURL URLWithString:urlStr];

// 2. Request -> PUT,request的默认操作是GET

NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:5.0f];

request.HTTPMethod = @"PUT";

// *** 设置网络请求的身份验证! ***

// 1> 授权字符串

NSString *authStr = @"admin:123456";

// 2> BASE64的编码,避免数据在网络上以明文传输

// iOS中,仅对NSData类型的数据提供了BASE64的编码支持

NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];

NSString *encodeStr = [authData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];

NSString *authValue = [NSString stringWithFormat:@"Basic %@", encodeStr];

[request setValue:authValue forHTTPHeaderField:@"Authorization"];

// 3. Session

NSURLSession *session = [NSURLSessionsharedSession];

// 4. UploadTask

NSData *imageData = UIImageJPEGRepresentation(_imageView.image, 0.75);

NSURLSessionUploadTask *upload = [session uploadTaskWithRequest:request fromData:imageData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

// 上传完成后,data参数转换成string就是服务器返回的内容

NSString *str = [[NSStringalloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"OK -> %@", str);

if (error != nil) {

NSLog(@"ERROR -> %@", error.localizedDescription);

} else {

}

[NSThreadsleepForTimeInterval:5.0f];

dispatch_async(dispatch_get_main_queue(), ^{

[indicator stopAnimating];

[indicator removeFromSuperview];

});

}];

[upload resume];

}


上传
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: