AFNetworking断点续传、下载图片

下载图片:下载图片后保存在本地文件中

//在lock和挂起状态都会下载
NSURLRequest *request=[[NSURLRequest alloc]initWithURL:[NSURL URLWithString:@"http://attach.bbs.miui.com/forum/201110/05/082552rm0v11zlv1axd13l.png"]];
//操作配置
AFHTTPRequestOperation *requestOperator=[[AFHTTPRequestOperation alloc]initWithRequest:request];
requestOperator.responseSerializer=[AFImageResponseSerializer serializer];
[requestOperator setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){
    //主线程中执行
    self.pictureView.image=responseObject;
    NSString *fileDestination=[NSHomeDirectory() stringByAppendingString:@"/Documents/1.png"];
    <span style="color:#ff6666;">//若respondObject为NSData,则用下面的方法</span>
    /*NSFileManager *fileManage=[NSFileManager defaultManager];
    if([fileManage createFileAtPath:fileDestination contents:imgData attributes:nil]){
        NSLog(@"%@",fileDestination);
    }*/
    if([UIImageJPEGRepresentation(responseObject, 1.0) writeToFile:fileDestination atomically:YES]){
        //成功后运行
        NSLog(@"%@",fileDestination);
    }  

} failure:^(AFHTTPRequestOperation *operation, NSError *error){
    NSLog(@"error:%@",error);
}];
//监听下载进度
[requestOperator setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead){
    self.progressView.progress=totalBytesRead*1.0/totalBytesExpectedToRead;
    //NSLog(@"%.3f",totalBytesRead*1.0/totalBytesExpectedToRead);
}];
//开始执行
[requestOperator start];  

断点续传:暂停和开始下载的按钮我都是一个按钮,所以定义了AFHTTPRequestOperation *resumeOperation和一个BOOL类型的resume判断是否续传。

因为在block中又调用了self,会造成内存泄露,所以定义了__weak的weakSelf解决内存泄露的问题

<span style="line-height: 18px; font-family: Consolas, 'Courier New', Courier, mono, serif; margin: 0px; padding: 0px; border: none; background-color: inherit;"><span style=</span><span class="string" style="line-height: 18px; font-family: Consolas, 'Courier New', Courier, mono, serif; margin: 0px; padding: 0px; border: none; color: blue; background-color: inherit;">"color:#ff0000;"</span><span style="line-height: 18px; font-family: Consolas, 'Courier New', Courier, mono, serif; margin: 0px; padding: 0px; border: none; background-color: inherit;">>__weak </span><span class="keyword" style="line-height: 18px; font-family: Consolas, 'Courier New', Courier, mono, serif; margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">ViewController</span><span style="line-height: 18px; font-family: Consolas, 'Courier New', Courier, mono, serif; margin: 0px; padding: 0px; border: none; background-color: inherit;"> *weakSelf=</span><span class="keyword" style="line-height: 18px; font-family: Consolas, 'Courier New', Courier, mono, serif; margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">self</span><span style="line-height: 18px; font-family: Consolas, 'Courier New', Courier, mono, serif; margin: 0px; padding: 0px; border: none; background-color: inherit;">;</span>  </span>
if(!self.resumeOperation){
        NSURLRequest *request=[[NSURLRequest alloc]initWithURL:[NSURL URLWithString:@"http://attach.bbs.miui.com/forum/201110/05/082552rm0v11zlv1axd13l.png"]];
        self.resumeOperation=[[AFHTTPRequestOperation alloc]initWithRequest:request];
        self.resumeOperation.responseSerializer=[AFImageResponseSerializer serializer];
        [weakSelf.resumeOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){
            //主线程中执行
            self.pictureView.image=responseObject;
            //保存文件
            NSString *fileDestination=[NSHomeDirectory() stringByAppendingString:@"/Documents/1.png"];
            if([UIImageJPEGRepresentation(responseObject, 1.0) writeToFile:fileDestination atomically:YES]){
                NSLog(@"%@",fileDestination);
            }
            self.resumeOperation=nil;  

        } failure:^(AFHTTPRequestOperation *operation, NSError *error){
            self.resumeOperation=nil;
            NSLog(@"error:%@",error);
        }];
        //监听下载进度
        [weakSelf.resumeOperation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead){
            self.progressView.progress=totalBytesRead*1.0/totalBytesExpectedToRead;
            //NSLog(@"%.3f",totalBytesRead*1.0/totalBytesExpectedToRead);
        }];
        //开始执行
        [self.resumeOperation start];
    }else if(!self.resume){
        [self.resumeOperation pause];
        self.resume=YES;
    }else{
        //继续
        [self.resumeOperation resume];
        self.resume=NO;
    }  
时间: 2024-11-05 13:48:47

AFNetworking断点续传、下载图片的相关文章

【iOS开发之旅】AFNetworking与SDWebImage下载图片

AFNetworking与SDWebImage下载图片 // // ViewController.m // AFNetworkingDemo // // Created by ChenQianPing on 16/1/31. // Copyright © 2016年 chenqp. All rights reserved. // #import "ViewController.h" #import "AFNetworking.h" #import "UII

有关UIImageView+AFNetworking 下载图片的线程问题

今天写了一个demo,从服务器获取图片,然后显示在cell上,大家都知道cell的重用机制,当往下拉的时候,上面的cell遮住了,下面的cell就会重用被遮住的cell, 贴代码: NSString *urlstring=[dict objectForKey:@"imagePath"]; NSURL *url=[NSURL URLWithString:urlstring];//获取图片的url路径 NSURLRequest *urlrequest=[[NSURLRequest allo

AFNetworking上传下载图片

1 #pragma mark 上传图片 2 -(void)Upload{ 3 4 UIImage * image = [UIImage imageNamed:@"iphone.png"]; 5 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 6 7 NSData *imageData = UIImageJPEGRepresentation(image, 1); 8 NSD

Android实现网络多线程断点续传下载

本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多线程断点需要什么功能? 1.多线程下载, 2.支持断点. 使用多线程的好处:使用多线程下载会提升文件下载的速度.那么多线程下载文件的过程是: (1)首先获得下载文件的长度,然后设置本地文件的长度. HttpURLConnection.getContentLength();//获取下载文件的长度 Ra

使用AFNetworking第三方下载类

AFNetworking 眼下使用比較多得一个下载库 眼下一直在维护更新,使用的是很easy 不须要加入不论什么关联的库 1.带block形式 内部是任务队列进行下载  就是对operation的一个封装下载 2.还对uikit 内部的类进行 类别形式加入方法(异步下载图片) 3.还能够检測网络状态 要使用常规的AFN网络訪问 1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

我的第一个python爬虫程序(从百度贴吧自动下载图片)

这个学期开设了编译原理和形式语言与自动机,里面都有介绍过正则表达式,今天自己学了学用python正则表达式写爬虫 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止. 如果把整个互联网当成

一个失误导致微信下载图片接口Token失效

公司的应用调了一个微信上传下载图片的接口,本来在线上跑的好好的,什么问题没有,但是这两天总是不定时的出现下载下来的图片损坏,拿着Token和serverid去接口测试网页验证,返回的是Token失效了,返回信息:"errcode": 40001, "errmsg": "invalid credential, access_token is invalid or not latest hint: [17ZG50664ent3].我是把Token和ticket

HTTP断点续传下载的原理

frombegintoend原文HTTP断点续传下载的原理 要实现断点续传下载文件,首先要了解断点续传的原理.断点续传其实就是在上一次下载断开的位置开始继续下载,HTTP协议中,可以在请求报文头中加入Range段,来表示客户机希望从何处继续下载. 这是一个普通的下载请求: GET /test.txt HTTP/1.1 Accept:*/* Referer:http://192.168.1.96 Accept-Language:zh-cn Accept-Encoding:gzip,deflate

利用Node 搭配uglify-js压缩js文件,批量下载图片到本地

Node的便民技巧-- 压缩代码 下载图片 压缩代码 相信很多前端的同学都会在上线前压缩JS代码,现在的Gulp Webpack Grunt......都能轻松实现.但问题来了,这些都不会,难道就要面对几十个JS文件一遍遍来回“复制-压缩-创建-粘贴”,这样太不人性化了. 于是可以借助Node + uglify-js 轻松实现.(前提你会点node操作) 1.首先看一下目录: |--uglifyJS |--js |--test1.js |--test2.js |--uglify.js   //这