iOS网络编程————AFNetworking上传和下载

作为使用最广泛的网络第三方框架,AFNetworking2.0对最新的iOS特性有很好的支持,对NSURL进行了封装,使用更加简便,功能更加完善。


导入AFNetworking

1:Github下载地址:https://github.com/AFNetworking/AFNetworking

2:将AFNetworking和UIKit+AFNetworking拖入当前的工程中,iOS7之后对网络的访问要另加设置,不要忘记开启网络(info.plist中添加App Transport Security Settings,在其下添加Allow Arbitrary Loads并设置其value为YES)


另种方法:在终端利用cocoaPods来将AFNetworking配置到当前工程中

1:终端输入:pod search AFNetworking并拷贝

2:cd到当前工程目录

3:初始化cocoa环境:pod init  (会自动创建Podfile文件)

4:编辑Podfile文件:vim Podfile

5:在终端中输入i,表示插入内容到Podfile

6:在target ‘工程名’ do与end之间写入拷贝的AFNetworking库

7:输入完以后,按下Esc键退出编辑状态,然后输入:wq,保存并退出。

8:在Finder中打开工程目录,在.xcworkspace中进行下面的编辑任务即可。

使用AFNetworking实现基本的下载数据任务

#import "ViewController.h"
#import "AFNetworking.h"
#import "UIProgressView+AFNetworking.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIProgressView *progressView;
@property (weak, nonatomic) IBOutlet UILabel *progressLabel;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

//downloadButton控制下载的方法
- (IBAction)downloadTask:(id)sender {
    
    //记住这个套路!!!
    
    //下载地址
    NSString *urlString = @"http://218.76.27.57:8080/chinaschool_rs02/135275/153903/160861/160867/1370744550357.mp3";
    //创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    
    //创建会话管理对象(在不使用Configuration来设置时用默认的manager足矣)
    AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
    
    //创建下载任务
    NSURLSessionDownloadTask *downloadTask = [sessionManager downloadTaskWithRequest:request progress:^(NSProgress *downloadProgress) {
        
        //progressView和progressLabel同步进度
        _progressView.observedProgress = downloadProgress;
        
        NSString *progressString = [NSString stringWithFormat:@"%.1f%%", downloadProgress.completedUnitCount * 1.0 / downloadProgress.totalUnitCount * 100];
        
        [_progressLabel performSelectorOnMainThread:@selector(setText:) withObject:progressString waitUntilDone:YES];
        
    
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        
        //接收到响应,准备开始接受数据
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
        
        //打印请求状态码
        NSLog(@"状态码:%li", httpResponse.statusCode);
        
        //targetPath临时问价保存路径
        
        //返回值为本次下载任务的保存路径
        NSString *filePath1 = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/菊花台.mp3"];
        
        //此block返回值为下载完之后文件存放的路径
        //这个返回的NSURL后面会传到filePath,因此这里自己设置的filePath可以随意取名
        return [NSURL fileURLWithPath:filePath1];
        
        
    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        
        //这个block返回的filePath实际上就是我们上面给他的确定的filePath,在这里他提供了这个可查下载文件路径的参数
        NSLog(@"下载完成路径:%@", filePath);
    }];
    
    //开始任务
    [downloadTask resume];
    
    //设置progressView的进度
//    [_progressView setProgressWithDownloadProgressOfTask:downloadTask animated:YES];
}


使用AFNetworking实现基础的上传任务(本地上传图片和文字到新浪微博,新浪微博的用户token和发布微博消息的api已拿到)

#import "AFNetworking.h"
#import "UIKit+AFNetworking.h"
#import "UIProgressView+AFNetworking.h"
#import "ViewController.h"

@class AFHTTPSessionManager;

@interface ViewController () 

@property (weak, nonatomic) IBOutlet UIProgressView *progressView;
@property (weak, nonatomic) IBOutlet UITextField *textField;
@property (weak, nonatomic) IBOutlet UILabel *progressLabel;



@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}





- (IBAction)uploadTask:(id)sender {
    
    if (_textField.text.length == 0) {
        return;
    }
    
    //上传路径
    NSString *urlString = @"https://api.weibo.com/2/statuses/upload.json";
    //登录认证
    NSString *token = @"2.00hd363CtKpsnBedca9b3f35tBYiPD";
    
    //拼接参数列表
    NSDictionary *dic = @{@"access_token" : token, @"status" : _textField.text};
    
    //创建manager
    AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
    
    //创建上传方法
    NSURLSessionDataTask *dataTask = [sessionManager POST:urlString parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        
        //本地文件路径
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"gem" ofType:@"jpeg"];
        
        NSData *imageData = [NSData dataWithContentsOfFile:filePath];
        
        //添加上传的数据
        [formData appendPartWithFileData:imageData name:@"pic" fileName:@"gem.jpeg" mimeType:@"image/jpeg"];
        
        //新版本AFNetworking提供了progress的参数
    } progress: ^(NSProgress * uploadProgress){
        

        NSLog(@"%@", uploadProgress);
        
        //progressLabel和progressView同步显示进程
        NSString *labelString = [NSString stringWithFormat:@"%.1f%%", (CGFloat)uploadProgress.completedUnitCount / uploadProgress.totalUnitCount * 100];
        
        [_progressLabel performSelectorOnMainThread:@selector(setText:) withObject:labelString waitUntilDone:YES];
        
        _progressView.observedProgress = uploadProgress;
        
    }success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        NSLog(@"上传成功:%@", responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        NSLog(@"上传失败:%@",error);

    }];
    

    
//    [_progressView setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)dataTask animated:YES];
    
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微软创建NT操作系统的历史可谓观止。NT操作系统是微软自1980年代中期开始开发的,经过多年的努力和完善,最终在1993年发布了第一个正式版本。NT操作系统以其稳定、高效和安全的特性,成为了微软在企业领域最重要的操作系统之一。 NT操作系统的成功给了微软一个稳定发展的基础,也推动了微软在未来的夺命狂奔。夺命狂奔是指在竞争激烈的软件市场上,为了保持领先地位而不断开发和发布新产品,微软通过不断创新和改进赢得了市场份额。 微软未来的夺命狂奔可以从它近年来推出的产品和服务中看出端倪。微软积极推广云计算服务Azure,这是一个强大的云平台,为企业提供了灵活、安全和可靠的解决方案。此外,微软还致力于发展人工智能技术,如语音识别、自然语言处理和机器学习等。这些创新不仅扩大了微软在企业市场的影响力,也增加了其全球用户的多样化需求。 微软在夺命狂奔中所面临的挑战也不容忽视。随着移动设备的普及,微软需要实现与iOS和Android等主流操作系统的兼容性,以保持在移动市场的竞争力。此外,随着开源软件的兴起,微软也需要适应这一趋势,积极参与开源社区,推动开源软件的发展。 总之,微软创建NT操作系统和未来的夺命狂奔展现了微软在软件行业的实力和潜力。通过持续的创新和不断进化,微软将继续在企业和消费者市场中扮演重要角色。 ### 回答2: 《观止:微软创建NT和未来的夺命狂奔》是一部以微软公司创造Windows NT操作系统和未来发展的故事为背景的电影。这个故事主要讲述了微软在当时面临的技术挑战、市场竞争和公司发展的困境,并展现了他们的不断努力和创新精神。 微软创建Windows NT操作系统的过程是一段充满曲折和艰辛的旅程。在那个时代,微软面对着Unix操作系统的垄断地位和其它竞争对手的激烈竞争。为了突破操作系统的技术限制和摆脱对其他公司的依赖,微软决定自己开发一款全新的操作系统。于是,他们成立了一个专门的团队,经过不断的研发和测试,最终诞生了Windows NT操作系统。 《观止:微软创建NT和未来的夺命狂奔》还聚焦于微软的未来发展。随着Windows NT的问世,微软成功地抓住了市场机遇,并成为全球最大的软件公司之一。电影展示了微软团队在公司内部的斗争和外部环境的变化。他们不断推出更新版本的Windows操作系统,提供更多的功能和更好的用户体验,以保持竞争优势。 此外,电影也揭示了微软面临的挑战和反思。他们在垄断调查和法律纷争中面临着巨大压力,并被要求在竞争和创新方面采取更加公平的做法。微软也通过收购和战略合作来扩大业务领域,尝试进军互联网和移动领域。然而,他们也面临着来自谷歌等公司的新兴竞争对手的挑战。 《观止:微软创建NT和未来的夺命狂奔》通过展示微软在创造和发展Windows NT操作系统过程中的挑战和努力,向我们展示了一个科技巨头如何在激烈的竞争中不断进步和寻求发展机遇。这部电影激励着观众们,鼓舞他们在面对困难和竞争时坚持创新和努力,并为未来的夺命狂奔奠定基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值